在我的项目中,构建后有两个不同的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
无论我改变什么,这个结果都是一致的。 怎么会这样?
答案 0 :(得分:1)
我的猜测是,在使用符号链接时,扩展的jar会以不同的顺序返回,并且它会从列出的第一个jar中加载persistence.xml
。
如java documentation中所述,使用目录通配符(*)时返回jar文件的顺序是不可预测的。为了始终首先加载相同的jar,解决方案是在类路径中显式列出jar而不是使用目录通配符:
目录中JAR文件的枚举顺序 未指定扩展类路径,并且可能因平台而异 平台,甚至在同一台机器上的时刻。一个 构造良好的应用程序不应该依赖于任何特定的 订购。如果需要特定订单,那么JAR文件可以是 在类路径中明确枚举。