使用<phase> </phase>在Maven中串行执行插件

时间:2014-09-11 07:26:48

标签: java maven maven-2 maven-3 maven-plugin

我在 pom.xml

中有以下结构
<profile>
    <id> x </id>
    <build>
        <finalName> y </finalName>
        <plugins>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <!-- DELETE SOME FOLDERS AND SOME FILES -->
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <!-- MOVE A FILE -->
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version> 1.6 </version>
                <executions>
                    <execution>
                        <phase> <!-- WHAT COMES HERE ? --> </phase>
                        <configuration> 
                            <!-- I EXECUTE CMD FILE HERE -->
                        </configuration>
                        <goals>
                            <goal> run </goal>
                        </goals>
                    <execution>
                <executions>
            </plugin>
        </plugins>
    </build>
</profile>    

我想实现插件的串行执行:

  1. 删除一些文件夹和一些文件(第一个插件)
  2. 移动文件(第二个插件)
  3. 运行cmd文件(第3个插件)
  4. 我应该使用<phase>来获得上述顺序(顺序执行)?它有关系吗?例如,可以使用pre-integration-test吗?

    P.S。:以下是阶段:http://maven.apache.org/ref/3.2.2/maven-core/lifecycles.html

2 个答案:

答案 0 :(得分:1)

Maven不支持在生命周期中添加步骤(无需编写新插件)。

如果您有复杂的构建步骤,并且您绝对需要某个订单,此订单会违反标准生命周期,那么Maven可能不适合您。请改为考虑Gradle

如果您必须使用Maven,请停止使用插件。相反,使用antrun插件复制所有构建步骤,因此所有操作都使用单个Ant脚本完成。然后,在生命周期中找到您希望一次执行所有步骤的位置。

如果在编译任何内容之前需要完成某些事情,

generate-sources是个好地方。如果要在编译和测试后运行代码,请使用prepare-package

请参阅此处查看完整的生命周期:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

答案 1 :(得分:1)

如果您想将不同插件的执行添加到同一生命周期阶段,则执行顺序由pom文件中定义的顺序定义。

因此,如果您选择将上述所有三个插件绑定到package阶段,那么它们将按照给定的顺序执行。

您当然可以使用antrun插件,该插件也可以使用,并且将隐式执行已定义顺序中的步骤,而无需考虑Maven的默认行为。

您还可以使用exec-maven-plugin在特定生命周期阶段执行脚本,但这可能不是一个好的解决方案,因为脚本依赖于操作系统。或者你可以使用groovy插件在groovy代码中执行一些步骤。