MissingResourceException:找不到包基本名称

MissingResourceException: Can't find bundle base name

当 运行我从 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 文件: 右键单击项目,select 导出 > Java > 可运行的 JAR 文件 带有选项

启动配置:BasicTool - work

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

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

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

我已经通过 运行ning 确认在 jar 文件中找到了 version.properties 文件:

jar tf basictool.jar > output.txt

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

resources/com/kit/version.properties

我尝试这样加载资源:

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

我的机器和环境规格如下: Windows7、Spring版本:3.7.2.

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

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

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

我希望我提供了 enough/clear 详细信息。如有任何帮助,我们将不胜感激,提前致谢!

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

但是当您按照您描述的方式创建 jar 文件时(导出 -> java -> 可运行的 jar),version.properties 位于 jar 文件中的 resources/com/kit/version.properties .注意路径前面的“resources”。
如果您在 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 之外的 中工作。