MissingResourceException:无法找到捆绑包基本名称

时间:2016-03-01 05:50:24

标签: spring maven jar resourcebundle properties-file

运行我从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文件: 右键点击项目,选择导出&gt; Java&gt;带有选项

的Runnable JAR文件

启动配置: 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,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的创建过程是导致问题的原因。

同样重要的是要注意属性文件在另一个maven项目中。

我希望我提供足够/清晰的细节。任何帮助将不胜感激,谢谢你提前!

1 个答案:

答案 0 :(得分:1)

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

但是当您按照描述的方式创建jar文件(export - &gt; java - &gt; runnable jar)时,version.properties会放在resources/com/kit/version.properties的jar文件中。注意路径前面的“资源” 如果在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之外的中工作。