符号链接如何影响加载persistence.xml

时间:2014-06-27 16:08:26

标签: linux hibernate jpa persistence symlink

在我的项目中,构建后有两个不同的persistence.xml出现在两个不同的jar文件中。如果我使用像这样的命令运行应用程序

/jre/v1.7.0_21/bin/java -cp patch:/path_to_app_jars/*:. org.somepath.MainClass

其中一个已加载,但如果我使用符号链接运行它,另一个就会达到峰值

bin/ -> path_to_app_jars
/jre/v1.7.0_21/bin/java -cp patch:/bin/*:. org.somepath.MainClass

无论我改变什么,这个结果都是一致的。 怎么会这样?

1 个答案:

答案 0 :(得分:1)

我的猜测是,在使用符号链接时,扩展的jar会以不同的顺序返回,并且它会从列出的第一个jar中加载persistence.xml

java documentation中所述,使用目录通配符(*)时返回jar文件的顺序是不可预测的。为了始终首先加载相同的jar,解决方案是在类路径中显式列出jar而不是使用目录通配符:

  

目录中JAR文件的枚举顺序   未指定扩展类路径,并且可能因平台而异   平台,甚至在同一台机器上的时刻。一个   构造良好的应用程序不应该依赖于任何特定的   订购。如果需要特定订单,那么JAR文件可以是   在类路径中明确枚举。