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
或<context:property-placeholder>
从文件系统加载.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文件时应注意!!!