【问题标题】:Classpath messages_xx.properties files not included in JARJAR 中不包含类路径 messages_xx.properties 文件
【发布时间】:2017-04-28 02:46:55
【问题描述】:

我在 IntelliJ 中使用 Maven 练习时遇到了一些问题,不知何故,我的类路径中的资源文件永远不会包含在构建的 JAR 中。

我的模块结构:

src/main/java/com/abc/Main.class                
src/main/java/com/abc/Messages.class            
src/main/java/com/abc/messages_en.properties    the not included resource files.
src/main/java/com/abc/messages_es.properties    
src/main/resources/                             misc resources

项目构建成功,但是当我运行 JAR 文件时,我会收到如下错误消息。当我解压 JAR 文件时,messages_xx.properties 文件丢失了。

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name com.abc.messages, locale en
        at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
        at org.jis.Messages.<init>(Messages.java:42)
        at org.jis.Main.main(Main.java:205)

我的 pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>2.6</version>
      <configuration>
        <includes>
          <include>${basedir}/src/main/java/com/abc/*.properties</include>
        </includes>
        <archive>
          <manifest>
            <mainClass>com.abc.Main</mainClass>
            <addClasspath>true</addClasspath>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

在 SO 上遇到了许多类似的线程,但解决方案似乎不适合我的情况。有什么建议吗?我一直试图弄清楚为什么会发生这种情况一段时间,但还没有找到答案。如果有人能给我一些提示,那就太好了。非常感谢。

【问题讨论】:

  • 你检查this answer了吗?有帮助吗?
  • @CrazyCoder 我很想删除我的答案并将这个问题标记为您的链接的副本...
  • @CrazyCoder No. :( src/main/resources/ 中的所有其他资源(图像)都被这 2 个 *.properties 文件替换,程序将无法运行。
  • 好吧,添加多个资源目录和模式,以便它们都被处理。

标签: java maven intellij-idea jar localization


【解决方案1】:

Maven 期望找到

src/main/java/com/abc/messages_en.properties
src/main/java/com/abc/messages_es.properties    

src/main/resources/com/abc/messages_en.properties
src/main/resources/com/abc/messages_es.properties    

src/main/java 中的资源文件不会在生成的 jar 文件中完成,因为

  1. maven-compiler-plugin 编译 java 源并输出到target/classes

  2. maven-resources-plugin 从 'src/main/resourcesintotarget/classes` 复制(可能还有过滤器)文件(包括它们的目录结构)

  3. maven-jar-plugin 然后根据target/classes的内容构建jar

因此,只需移动您的属性文件并停止与 maven way 做事的斗争。

【讨论】:

  • 谢谢!除了将属性文件放在 src/main/resources 中并更改代码之外,真的没有(简单的)方法吗?并不是我不愿意更改代码,只是很想知道......
  • 只要在resources目录下维护com/abc包结构就不需要修改代码
猜你喜欢
  • 2012-02-15
  • 2023-03-18
  • 2023-03-11
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多