在部署webapp时,我需要更新UI资源中的一些变量,解压缩一些资产并连接一些文件,目前这是通过ant任务实现的。我正在尝试使用类似的东西在maven构建过程中运行此任务...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>deploy-ui</id>
<phase>prepare-package</phase>
<inherited>false</inherited>
<configuration>
<target>
<property name="buildDir" value="${project.build.directory}/${project.build.finalName}" />
<ant antfile="build.xml" target="static-assets" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
上述操作失败,因为文件尚未复制到目标目录中。如果我将阶段设置为“package”,则ant任务运行正常并且所有文件都被创建/修改,但是因为在运行ant目标之前已经构建了.war,所以没有任何帮助。
基本上,我需要在准备包阶段结束时运行我的目标。
看了Lifecycle Reference我无法锻炼如何将更细粒度的目标暴露给antrun插件。
有什么想法吗?
答案 0 :(得分:17)
由于我的评论没有得到任何答案,我猜你想继续使用maven-antrun-plugin
。
根据我所学到和经验,如果要在同一阶段执行两个插件,那么它们将按照pom.xml
中声明的顺序执行。
要实现此功能,您必须在maven-war-plugin
之后的<plugins/>
列表中添加maven-antrun-plugin
。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>deploy-ui</id>
<phase>package</phase>
<inherited>false</inherited>
<configuration>
<target>
<property name="buildDir" value="${project.build.directory}/${project.build.finalName}" />
<ant antfile="build.xml" target="static-assets" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<!-- First step is to disable the default-war build step. -->
<id>default-war</id>
<phase>none</phase>
</execution>
<execution>
<!-- Second step is to create an exploded war. Done in prepare-package -->
<id>war-exploded</id>
<phase>prepare-package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
<execution>
<!-- Last step is to make sure that the war is built in the package phase -->
<id>custom-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
添加了一些更多的执行,以便default-war
首先被禁用,然后战争爆发,最后战争被打包。
答案 1 :(得分:1)
正如您所看到的,这是一个生命周期无法提供所需粒度的地方。我之前为某人回答了similar question。这不是您问题的确切答案,但该技术可能适用。