我有一个简单的结构:一个数据Jar文件,其中包含一批数据,和一个服务Jar文件,它使用该数据运行服务。为了使数据易于更换,我将它们分开,并且service.jar的类路径包含了data.jar所在的目录。
在service.jar中,我使用getResource来加载数据文件。如果数据文件直接在文件夹内,则可以正常工作,但是如果数据文件在data.jar内,则会失败;
这会失败:
all
+ globalclasspath
| + data.jar
| + mine.properties
+ daemons
+ service.jar
jsvc -cp globalclasspath:daemons/service.jar (...)
MyClass.class.getClassLoader( ).getResource( "mine.properties" ); // <-- null
但是这个有效:
all
+ globalclasspath
| + mine.properties
+ daemons
+ service.jar
jsvc -cp globalclasspath:daemons/service.jar (...)
MyClass.class.getClassLoader( ).getResource( "mine.properties" ); // <-- not null
我不想改变类路径(除非我可以将其更改为不依赖于数据jar文件名称的通用内容),但我可以更改getResource字符串(我尝试过/data/mine.properties和/data.jar/mine.properties都没有成功)。是否有一种更改方式,使资源可以从jar包内加载?
getResourceAsStream
了(我写getResource
是因为我不知道有什么区别,而且它似乎更简单)。 - Dave