Maven 将 applicationContext.xml 从 src/main/resources 复制到 target/myproject/WEB-INF

Posted

技术标签:

【中文标题】Maven 将 applicationContext.xml 从 src/main/resources 复制到 target/myproject/WEB-INF【英文标题】:Maven copying applicationContext.xml from src/main/resources to target/myproject/WEB-INF 【发布时间】:2011-11-17 16:33:35 【问题描述】:

目前,我认为默认,它复制到

target/myproject/WEB-INF/classes

所以在部署时它不会获取上下文。

另外,我想引用一个服务器特定的配置文件 database.properties,我想把它放在 tomcat/conf 中,然后在 applicationContext.xml 中引用它,我该怎么做?

另外(2),我的印象是这是一种相当标准和体面的设置方式 - 如果我错了,请纠正我。

编辑 对于服务器特定的配置文件,我使用这个

<context:property-placeholder 
      location="file:$catalina.home/conf/database.properties" 
      ignore-unresolvable="true"
 />

【问题讨论】:

【参考方案1】:

如果您需要将applicationContext.xml 保留为类路径资源,您可以通过在web.xml 中添加以下行来配置ContextLoaderListener 以从类路径中选择它:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

这比配置 Maven 复制到 WEB-INF 要容易得多。

关于第二个问题,可以配置PropertyPlaceholderConfigurer&lt;context:property-placeholder&gt;从文件系统加载.properties文件。

【讨论】:

【参考方案2】:

对于您的标题问题:通常在 .war maven 模块中,您会将网络相关资源放在 src/main/webapp 下,而不是 src/main/resources 下。然后 maven 插件会自动选择它们,因为它符合约定。因此,将您的 applicationContext.xml 移动到 src/main/webapp/WEB-INF

另一个选项是按照documentation 中的描述配置 webResources

对于第二个问题,您可以查看PropertyPlaceHolderConfigurer。你只需要让路径正确。

【讨论】:

我认为约定是把它放在 src/main/resources 中,为了测试我可以在 src/test/resources 中放一个不同的 这是 jar 模块的约定,即使这样它们也被放在类中,因为这决定了 jar 文件的内容。对于应该在 webapp 结构中而不是在类中结束的 webapp 资源,您将它们放在 src/main/webapp 中,然后将它们拉到具有 .war 文件根目录的匹配目录结构中。所以 src/main/webapp/WEB-INF/spring/config/context.xml 最终会出现在 .war 文件中的 WEB-INF/spring/config/context.xml 中。 另一个选项是配置 webResources。我已经通过指向该文档的链接更新了我的答案。

以上是关于Maven 将 applicationContext.xml 从 src/main/resources 复制到 target/myproject/WEB-INF的主要内容,如果未能解决你的问题,请参考以下文章

有WebService的项目中写applicationContex.xml文件时应注意!!!

spring中applicationContex.xml文件

IOC与DI(xml 配置)

spring Bean

taglib block

Spring之Aware