运行我从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项目中。
我希望我提供足够/清晰的细节。任何帮助将不胜感激,谢谢你提前!
答案 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之外的和中工作。