Java webapp无法从jar加载.properties

时间:2016-09-08 08:03:47

标签: java maven internationalization

我正在构建一个基于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。任何人都知道,请帮助我,非常感谢〜

1 个答案:

答案 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);
}