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问题的处理(代码片段