[英]ResourceBundle not found with Maven Shade plugin
我有一個 java 項目,我想用 Shade 插件放入一個胖 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”,而較低的“de”和“en”傳遞給 getBundle。 將文件重命名為
lang_de.properties
lang_en.properties
解決了這個問題。
我仍然完全不知道為什么它從 IntelliJ 開始而不是在執行胖 JAR 時起作用。
僅供參考:不需要 ResourceBundleAppendingTransformer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.