无法找到基本名称为/Bundle,语言环境为en_US的包。

53

我正在使用一个依赖于JSF的库。

当我尝试运行我的项目时,它显示以下异常消息:

java.util.MissingResourceException: Can't find bundle for base name /Bundle, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:705)

有什么想法吗?

1
看起来你传递了一个错误的路径。 - Adrian Mitev
你可以尝试查看这个答案这里 - ACV
4
请在src/main/webapp/WEB-INF/classes目录下创建Bundle.properties文件。 - Mdhar9e
1
尝试在路径src/main/resources上创建一个资源文件夹,然后通过在Android上使用ResourceBundle来放置或获取您的文件。 - abbasalim
在运行IntelliJ社区版2019.3时遇到了这个错误。解决方案是降级。 - smac89
显示剩余2条评论
14个回答

71
该异常提示需要在类路径的根目录中有一个 Bundle_en_US.propertiesBundle_en.properties 或者至少是 Bundle.properties 文件,但实际上却没有。确保至少存在其中一个被提及的文件在类路径的根目录下。或者,确保你提供了正确的资源包名称。例如,如果资源包文件实际上被放置在 com.example.i18n 包中,则需要将 com.example.i18n.Bundle 作为资源包名称传递,而不是 Bundle。如果您正在使用 Eclipse 的“动态 Web 项目”,那么类路径根目录表示为 src 文件夹,其中所有 Java 包都位于此处。如果您正在使用 Maven 项目,则资源文件的类路径根目录表示为 src/main/resources 文件夹。
另请参见:

1
正如在这里提到的那样,如果你正在使用Maven项目,需要手动在src/main/目录下创建一个新的“resources”文件夹,并将所有资源放入其中。然后进行Clean -> Build操作,再次运行项目即可成功获取资源。 - Dasun Nirmitha

13

maven-tomcat-plugin

如果您使用maven-tomcat-plugin / maven-tomcat7-plugin 启动项目,则必须将Bundle.properties或甚至Resource.properties放置在src/main/webapp/WEB-INF/classes目录下。不要问为什么,这是由于该插件模拟了Tomcat的方式。


3
将.properties文件移动到WEB-INF/classes目录下(甚至可以在其下创建另一个包装文件夹),这样就能正常工作了。点赞并感谢! - lannyf
1
感谢Grim和lannyf的帮助,他们的信息帮助我解决了Resin web服务器上的类似问题。 我正在处理一个项目,在该项目中,属性文件存储在webapps/ROOT/WEB-INF/lib/中,与.jar文件一起存储。 webapps/ROOT/WEB-INF/classes/中没有任何内容。 当我尝试将此设置复制到新服务器时,出现错误“Caught exception: Can't find base number for bundle X, locale en”。 但是,当我在webapps/ROOT/WEB-INF/classes/中创建了指向lib/文件夹中.properties文件的符号链接时,它解决了此问题。 非常感谢! - Kitserve

8

如果您正在Eclipse中运行.java文件,则需要在构建路径中添加资源路径,然后您将不会看到此错误。


1
你能更具体一些吗? - JDOaktown
2
右键单击项目 > 属性 (alt + enter) > Java 构建器路径 > 源 > 添加文件夹... - Yura Shinkarev

6
在我的情况下,问题是在Locale.forLanguageTag(..)中使用了语言标签"en_US",而不是"en-US"——使用破折号而不是下划线!
此外,使用Locale.forLanguageTag("en-US")来定义一个带有区域("US")的语言("en"),而不是用new Locale("en_US")new Locale("en_US")。但new Locale("en")是可以的。

4
我遇到了同样的问题,balus的解决方案解决了我的问题。
记录一下:
WEB-INF\faces-config 是
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
    <application>
        <locale-config>
            <default-locale>en</default-locale>
        </locale-config>
        <message-bundle>
            Message
        </message-bundle>
    </application>
</faces-config>

在mkyong的教程之后,我在WebContent\Resources下面加入了Message.properties文件。

即使我将bundle重命名为“Message_en_us”和“Message_en”,仍然出现了讨厌的异常。将其移动到src\下面解决了问题。

如果有人发布关于如何使bundles在resources下工作的缺失部分,那将是一件美好的事情。


1
在Maven中,进入资源文件夹,创建与配置文件相同的包结构,并将其复制到该位置。

1
在我的情况下,我正在处理一个SpringBoot项目,并且遇到了相同的异常。
解决方案是通过将env.properties文件添加到类路径中(即src/main/resource文件夹)来完成的。导致问题的原因是在log4j配置中有一个属性,如下所示: ${bundle:env:log.file.path}

1

Bundle.properties文件必须在.class文件所在的目录中。如果它位于src目录中,则需要确保将其复制到同一包中的bin(输出)目录中。


1

Bundle名称必须是完全限定的,比如如果您的bundle Bundle.propertiesx.y.z 包内,那么您需要写成 ResourceBundle.getBundle("x.y.z.Bundle");


0
问题可能在于 faces-config.xml 文件中的资源束 base-name 属性与您的 properties 文件的路径不同。这在我的 firstcup Java EE 教程中发生了,我在创建项目时给了一个不同的包名,然后 Glassfish 找不到位于 "firstcup.web" 的 properties 文件夹。

希望对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接