我正在构建一个基于Maven多模块的Web应用程序。所以我的项目结构如下:
/module1
/src/main/java
package/Module1.java
/src/main/resources
conf/i18n_en.properties
/webapp
/src/main/java
package/Web.java
/src/main/resources
conf/i18n_en.properties
/src/main/webapp
我在每个模块中都有I18N的不同属性(“i18n_en.properties”),我在代码中加载属性文件并获取信息。在单模块测试中运行似乎很好。
private ResourceBundle rb;
String filename = BASE_NAME + "_" + LANG + ".properties";
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename);
if(in == null) {
in = c.getResourceAsStream(filename);
}
if (in == null) {
in = c.getClassLoader().getResourceAsStream(filename);
}
if (in != null) {
rb = new PropertyResourceBundle(in);
}
然而,当我用IDEA启动tomcat时,程序只加载webapp中的属性!只是找不到“Module1”的属性!
我认为这是从内部jar加载属性的问题。对于部署的目录如下:
/WEB-INF
/classes
/conf/i18n_en.properties (from webapp)
/lib
/Module1.jar (has it's own properties in it)
我真的很困惑。我搜索了很长时间相关的所有东西,我发现了一些类似的东西,但我无法解决问题。我想我已经完成了他们所说的话。Java WebApp: Loading resource from .jar located in WEB-INF
我不知道问题出在哪里,必须有一些方法来加载属性内部jar。任何人都知道,请帮助我,非常感谢〜
答案 0 :(得分:0)
在jar文件中,您不能使用ClassLoader()方法来查找元素 您可以使用:
try {
URL url2 = new URL(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().toString()+your path to file in structre);
InputStream in = url2.openStream();
} catch (URISyntaxException ex) {
Logger.getLogger(PrepareGUI.class.getName()).log(Level.SEVERE, null, ex);
}