我有一个在 Eclipse(更准确地说是 MyEclipse 10)中开发并使用 Maven 3 构建的 Java webapp 项目。
我有以下布局(仅包括与我的问题相关的文件:
project root
|-- src
| |-- main
| | |-- java
| | |-- resources
| | | |-- log4j.xml
| | | +-- struts.properties
| | |-- webapp
| | | |-- META-INF
| | | | +--context.xml
| | |-- config
| | | |-- test
| | | | |--log4j.xml
| | | | |--struts.properties
| | | | +--context.xml
| | | +-- prod
| | | | |--log4j.xml
| | | | |--struts.properties
| | | | +--context.xml
| +--test
+--pom.xml
如您所见,我包含了许多配置文件。在项目结构中处于适当位置的人,即在内部src/main/resources
,并且src/main/webapp
是我在 MyEclipse 中工作时经常使用的人。我可以使用 MyEclipse 连接器自动将部署更新为我的开发机器上的 Tomcat 实例。我只需单击“运行服务器”即可调试。实际上在这种情况下根本不需要使用 Maven。
然后,当我想为另一个环境(例如测试或生产)构建一个版本时,我运行mvn -P test clean install
它并构建了一个不错的 WAR。
我的目标是将最终 WAR 中的配置文件替换为src/config/{environment}/
.
我在我的pom.xml
:
<profiles>
<profile>
<id>test</id>
<properties>
<environment>test</environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>
</properties>
</profile>
</profiles>
然后,我尝试将这些资源从指定的配置文件(使用environment
变量)复制到 WAR 中的正确位置(或将被压缩到 WAR 中的临时文件夹):
<webResources>
<resource>
<directory>/src/main/config/${environment}</directory>
<targetPath>META-INF/</targetPath>
<includes>
<include>context.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/config/${environment}</directory>
<targetPath>WEB-INF/classes/</targetPath>
<includes>
<include>
struts.properties
</include>
<include>
log4j.xml
</include>
</includes>
</resource>
</webResources>
现在这似乎可行,除了“标准”资源在此之后被复制到目录中,因此它们覆盖了这些文件。所以我总是以例如log4j.xml
fromsrc/main/resources
而不是 from the one 结尾说src/main/configuration/prod/
从 Maven 输出中提取:
[INFO] Processing war project
[INFO] Copying webapp webResources [D:\workspace\MyProject/src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp webResources [D:\workspace\MyProject\src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp resources [D:\workspace\MyProject\src\main\webapp]
正如您在最后一行看到的那样,src/main/webapp
之后复制了来自的内容,从而覆盖了我的自定义文件:(
我的问题:如何强制 Maven 使用“来自激活的配置文件”的文件并以某种方式覆盖“自然”文件?