我有以下Web应用程序结构:
WAR
- ...
- WEB-INF
- lib
- module1.jar
- messages.properties
- MyClassModule1.class
- module2.jar
- messages.properties
- MyClassModule2.class
- classes
- messages.properties
- MyClass.class
我希望模块内的类能够访问相应模块的本地messages.properties
,例如我希望MyClassModule1
访问messages.properties
内的WEB-INF/lib/module1.jar
,而不是WEB-INF/classes
中的MyClassModule1.class.getClassLoader().getResourceAsStream("messages.properties");
Thread.currentThread().getContextClassLoader().getResourceAsStream("messages.properties");
,因为它现在似乎正在发生。
我测试的方法如下:
WEB-INF/classes/messages.properties
他们都给我WEB-INF/lib/module1.jar!/messages.properties
,而不是messages.properties
。
当我从模块内部调用以前的getResourceAsStream(...)
方法时,是否有非triky 方法来获取本地*.jar
?
要考虑的一些限制因素:
WEB-INF/classes/
文件的根目录或根目录下
{{1}} WAR文件,如示例中所示。答案 0 :(得分:0)
{
Properties props = new Properties();
try
{
props.load(MyClass.class.getResourceAsStream("/someProps.properties"));
} catch (IOException e)
{
e.printStackTrace();
}
someProperty = props.getProperty("someKey");
}
它在Eclipse中工作,因为在启动应用程序时,系统类加载器配置了jar作为其类路径的一部分。 (例如,java -jar my.jar将在系统类加载器中加载my.jar。)Web应用程序不是这种情况 - 应用程序服务器使用复杂的类加载将Web应用程序彼此隔离,并与应用程序服务器的内部隔离。例如,请参阅tomcat类加载器方法,以及使用的类加载器层次结构图。