【发布时间】:2011-02-10 23:41:37
【问题描述】:
我们有一个当前生成 WAR 文件的 Maven 构建(版本 2.2.1)。我们的输出目录是target/,所以我们最终得到了一个构建工件target/MyWar.WAR。
我将两个配置文件添加到我们的 POM.xml 文件中,以促进特定的构建“风格”,每个“风格”都需要特定版本的 A.xml 文件。在中间构建目录target/MyWar/中有3个文件:
A.xml
A_1.xml
A_2.xml
在没有指定配置文件的情况下在 Maven 中构建应该使用 A.xml,目前也是如此。我想使用maven-antrun-plugin(对于 Profile 1)将 A.xml 替换为 A_1.xml,对于 Profile 2 将 A.xml 替换为 A_2.xml。 (删除 _1 和 _2 后缀。)
这是 Profile 1 的执行示例:
<profile>
<id>Profile1</id>
<build>
...
<execution>
<id>Profile1-Replace</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<delete
file="${project.build.outputDirectory}/../MyWar/A.xml" />
<copy
file="${project.build.outputDirectory}/../MyWar/A_1.xml"
tofile="${project.build.outputDirectory}/../MyWar/A.xml" />
</tasks>
</configuration>
</execution>
...
</build>
</profile>
这会正确替换中间 target/MyWar/ 目录中的文件,但无论出于何种原因,target 中生成的最终 WAR不反映了这些更改。
好像运行在'package'阶段已经太晚了,WAR已经建好了。将阶段更改为“编译”或“测试”,即之前的阶段,抱怨因为 A.xml 文件(和中间构建目录)甚至还没有创建。
【问题讨论】:
-
Maven 2 还是 Maven 1?如果是 Maven 2,哪个版本?我相信在最新版本的 Maven 2 中,您的插件在
元素中的顺序决定了插件在同一阶段时运行的顺序。 -
Maven 2.2.1,更新了我的问题。
-
也许您可以保留一份 A.xml 文件的副本,但使用资源过滤 (sonatype.com/books/mvnref-book/reference/…) 而不是配置文件来获得所需的效果?
-
资源过滤的问题是我在Eclipse中运行webapp进行开发,所以我不能在任何文件中留下变量,即使是预发布。
标签: java maven-2 servlets maven war