找不到基本名称的Spring ResourceBundle

时间:2014-12-16 15:50:32

标签: java spring maven

我在将消息值带到属性文件时遇到问题。

我正在使用intelliJ IDEA,我有一个包

com.test.messages 

在里面我有messages.properties文件。

这是我的xml

   <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="com.test.messages.messages"/>
    </bean>

当我重新启动服务器时,这是我收到的警告

WARNING: ResourceBundle [com.test.messages.messages] not found for MessageSource: Can't find bundle for base name com.test.messages.messages, locale en_US

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

你的项目中应该有一个文件:

src\main\resources\com\test\messages.properties

答案 1 :(得分:0)

虽然我不是IDEA专家,但我知道在单独使用IDE时,放置在源代码层次结构中的.property文件等资源会被复制到类路径中。但是,如果您使用maven,那么它将接管构建,并且默认情况下不会复制java路径中的任何内容。您必须将所有类路径资源放在src\main\resources中,并在任何层次结构中镜像包名称以获得相同的结果。所以在你的情况下:

src\main\resources\com\test\messages\messages.properties 

并且maven将正确复制

答案 2 :(得分:0)

不要将属性保留在包中。 资源目录是保持内部属性的标准位置。

/src/main/resources

/src/test/resources

如果要将属性与项目分开 - 请使用这种弹簧配置:

<bean id="props" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="localOverride" value="true"/>
    <property name="locations">
        <list>
            <value>classpath*:messages.properties</value>
            <value>file:messages.properties</value>
        </list>
    </property>
</bean>

因此,您可以使用外部覆盖内部属性(不要忘记使用-cp添加到类路径)。

无论如何,声明的声明将如下所示:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="${property.name}"/>
</bean>

答案 3 :(得分:0)

我知道这是个老问题,但让我放弃我的解决方案:)

源文件夹(resources 不是包):

/src/main/java/
              somepackage/abc.java
/src/main/resources/
              messages.properties

Eclipse 默认输出 java 构建路径:

myProject/build/classes

Eclipse 默认部署路径:

WEB-INF/classes

我项目的 spring 上下文 XML 文件路径:

/src/main/webapp/WEB-INF/context.xml

注入资源包,

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
   <property name="basenames" value="messages"/>
</bean>

正如 Azee 所说,不鼓励将属性保存在包中。如果 messages.propertiesresources 包中,如下所示:

/src/resources/messages.properties

context.xml 应该是这样的:

 <property name="basenames" value="resources/messages"/>