使用 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