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 之外的 和 中工作。
当 运行我从 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 之外的 和 中工作。