使用 Maven Shade 插件找不到 ResourceBundle
ResourceBundle not found with Maven Shade plugin
我有一个 java 项目,我想将其放入带有 Shade 插件的 fat jar 中。我在里面创建了一个资源包。当我 运行 使用 IntelliJ“运行” 的项目时,一切正常,但是当我构建 fat-jar 并尝试 运行 它说的
java.util.MissingResourceException: Can't find bundle for base name lang.lang, locale de
捆绑包位于该文件夹中:
- src
- main
- resources
- lang
- lang_DE.properties
- lang_EN.properties
加载包的代码:
ResourceBundle.getBundle("lang.lang", propertyService.getLanguage())
(在 运行 intelliJ 时有效)
阴影插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>project-classifier</shadedClassifierName>
<outputFile>target${project.artifactId}.jar</outputFile>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>my.main.class</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ResourceBundleAppendingTransformer">
<basename>lang/lang</basename>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
我还检查了 JAR,语言文件在它们应该在的位置,所以它们应该是可见的。
我添加了第二个变压器,但我不确定是否需要。
我终于找到了:它是文件名中的大写 'DE' 和 'EN',而传递给 getBundle 的是小写的 'de' 和 'en'。
将文件重命名为
lang_de.properties
lang_en.properties
解决了问题。
我仍然完全不知道为什么它在从 IntelliJ 启动时有效,而在执行胖 JAR 时却无效。
仅供参考:不需要 ResourceBundleAppendingTransformer
我有一个 java 项目,我想将其放入带有 Shade 插件的 fat jar 中。我在里面创建了一个资源包。当我 运行 使用 IntelliJ“运行” 的项目时,一切正常,但是当我构建 fat-jar 并尝试 运行 它说的
java.util.MissingResourceException: Can't find bundle for base name lang.lang, locale de
捆绑包位于该文件夹中:
- src
- main
- resources
- lang
- lang_DE.properties
- lang_EN.properties
加载包的代码:
ResourceBundle.getBundle("lang.lang", propertyService.getLanguage())
(在 运行 intelliJ 时有效)
阴影插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>project-classifier</shadedClassifierName>
<outputFile>target${project.artifactId}.jar</outputFile>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>my.main.class</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ResourceBundleAppendingTransformer">
<basename>lang/lang</basename>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
我还检查了 JAR,语言文件在它们应该在的位置,所以它们应该是可见的。 我添加了第二个变压器,但我不确定是否需要。
我终于找到了:它是文件名中的大写 'DE' 和 'EN',而传递给 getBundle 的是小写的 'de' 和 'en'。 将文件重命名为
lang_de.properties
lang_en.properties
解决了问题。
我仍然完全不知道为什么它在从 IntelliJ 启动时有效,而在执行胖 JAR 时却无效。
仅供参考:不需要 ResourceBundleAppendingTransformer