Java 依赖项jar没有加载自己的资源文件
我有一个依赖项Java 依赖项jar没有加载自己的资源文件,java,properties,jar,build,gradle,Java,Properties,Jar,Build,Gradle,我有一个依赖项utilities.jar,它在编译时在根目录中有一个dev.properties文件(解编译时在src/main/resources中)。jar有一个类(PropertiesUtil.java),用于加载具有以下内容的属性: PropertiesUtil.class.getResourceAsStream("/dev.properties"); 此jar作为依赖项包含在我的webapp中。编译时,webapp在其根目录中有自己的dev.properties文件(在src/mai
utilities.jar
,它在编译时在根目录中有一个dev.properties
文件(解编译时在src/main/resources
中)。jar有一个类(PropertiesUtil.java
),用于加载具有以下内容的属性:
PropertiesUtil.class.getResourceAsStream("/dev.properties");
此jar作为依赖项包含在我的webapp中。编译时,webapp在其根目录中有自己的dev.properties文件(在src/main/resources
文件夹中以未编译的形式)
utilities.jar不加载自己的内部dev.properties
文件,而是加载webapp的dev.properties
文件
我尝试了不同的方法,比如
PropertiesUtil.class.getClassLoader.getResourceAsStream("dev.properties");
没有成功
我正在使用Gradle将utilities.jar
和webapp编译成war。属性文件名必须相同,因为我传入了一个JVM属性
-Dproperty.filename=[dev|qa|prd].properties
启动webapp时。此系统属性用于加载webapp和utilities.jar的正确属性文件
jar是一个单独的项目,与gradleclean build
打包并上传到工件服务器。在构建war时,webapp从工件服务器中提取实用程序.jar
。我认为出现这个问题是因为在类路径中有两个路径完全相同的不同文件(即使其中一个在jar中)。很可能一个dev.properties
被覆盖
我建议将至少一个属性文件的路径更改为在项目根目录之外。例如,将实用程序的未编译dev.properties
放在:
/src/main/resources/utilities/dev.properties
然后通过以下方式访问它:
PropertiesUtil.class.getClassLoader.getResourceAsStream("/utilities/dev.properties");
然后这两个属性文件将不再互相践踏,这将解决您的问题。@durron597 edited post谢谢您的编辑。你能不能也加入一个gradle片段?@durron597我不认为这会有什么不同。build.gradle文件是直截了当的…我试图弄清楚jar中是否有两个/dev.properties
副本,或者其中一个副本是否被覆盖。但我有一个主意,见answer@durron597oh我懂了。utilities.jar有自己的dev.properties打包到它自己包的根目录中。。。webapp在WEB-INF/classes/(未爆炸时)中打包了自己的dev.properties