MissingResourceException:找不到捆绑包基本名称

Posted

技术标签:

【中文标题】MissingResourceException:找不到捆绑包基本名称【英文标题】:MissingResourceException: Can't find bundle base name 【发布时间】:2016-06-13 10:34:40 【问题描述】:

运行我从 maven 项目创建的 jar 文件时:

java -jar basictool.jar

我得到这个错误异常:

    Exception in thread "main" java.lang.reflect.InvocationTargetException 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
    Caused by: java.util.MissingResourceException: Can't find bundle for base name com/kit/version, locale en_US
        at java.util.ResourceBundle.throwMissingResourceException(UnknownSource)
        at java.util.ResourceBundle.getBundleImpl(Unknown Source)
        at java.util.ResourceBundle.getBundle(Unknown Source)
        at com.factories.FactoryImpl.<init>(FactoryImpl.java:80)
        at com.parsers.BasicParser.<init>(BasicParser.java:32)
        at com.parsers.FileParser.<init>(FileParser.java:76)
        at com.tools.BasicTool.main(BasicTool.java:75)
    ... 5 more

我使用 maven jar 创建向导创建了 jar 文件: 右键单击项目,选择 Export > Java > Runnable JAR file 和选项

启动配置:BasicTool - 工作

导出目的地:C:\Users\Victor\Documents\basictool.jar

库处理:将所需库打包到生成的 JAR 中

version.properties 文件保存在src/main/resources 中,如com/kit/version.properties

我已通过运行检查是否在 jar 文件中找到了 version.properties 文件:

jar tf basictool.jar > output.txt

我在哪里可以找到 version.properties 文件:

resources/com/kit/version.properties

我尝试像这样加载资源:

ResourceBundle.getBundle("com/kit/version");

我的机器和环境规格如下: Windows 7,春季版:3.7.2

注意: 我发现了许多与我的问题相似的问题,但我找到的答案指向属性文件被正确命名或放置在正确的位置。从这些答案中我了解到 version.properties 很好,因为默认情况下ResourceBundle.getBundle("com/kit/version") 将首先查找 version.class 然后是 version.properties。它还将在最终查找基本名称 version.properties 之前查找 version_en_US.properties。 我似乎与上述一致,因为文件 version.properties 位于正确的位置并正确命名。我似乎也与其他答案提供的一致:(

我还想指出,当我从 spring 运行程序时,它发现资源很好,这让我怀疑 jar 的创建过程是问题的原因。

另外需要注意的是属性文件在另一个maven项目中。

我希望我提供了足够/清晰的细节。任何帮助将不胜感激,在此先感谢您!

【问题讨论】:

【参考方案1】:

如果您的应用程序在 Eclipse 中调用 ResourceBundle.getBundle("com/kit/version");,一切正常。

但是当您以您描述的方式创建 jar 文件时(导出 -> java -> 可运行的 jar),version.properties 将放在 jar 文件中的 resources/com/kit/version.properties。注意路径前面的“资源”。 如果您在 Eclipse 外部使用 java -jar basictool.jar 调用此 jar,则无法找到 version.properties 并抛出 java.util.MissingResourceException

如果您更改路径并调用 ResourceBundle.getBundle("resources/com/kit/version");,它将无法在 Eclipse 中工作,但 java -jar basictool.jar 可以。

似乎从 Eclipse 导出项目会导致问题。

我建议创建 jar 文件以在不使用 Eclipse 的情况下使用 maven-assembly-plugin。 可以在here 找到一个示例。 这个插件创建了一个没有resources 目录的jar 文件,因此ResourceBundle.getBundle("com/kit/version"); 的调用在 Eclipse 之外工作。

【讨论】:

谢谢!是的,这就是我最终弄清楚并做到的......我只是忘了在这里写一个答案。做得很好:)

以上是关于MissingResourceException:找不到捆绑包基本名称的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 时出现 MissingResourceException?

解决方法 java util MissingResourceException Can't find bundle fo

Angular 11,Ionic 5,Capacitor 2 gradle 同步错误“引起:org.gradle.api.resources.MissingResourceException”

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for b

Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.Loc

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段