我想在我的插件中创建一个执行顺序,它包含一个maven插件,前后执行另一个maven插件。所有3次执行都是部署阶段的一部分。
以下是我想要做的一个例子:
注意:url:get是我自己的custo mojo,只是使用commons httpClient执行http get。
我通常会在下一阶段附加after插件执行,但不幸的是deploy是jar生命周期的最后阶段。
提前谢谢你,
科斯塔斯
注意:我的pom文件中的以下插件段会创建以下不期望的执行顺序:
插件片段:
<plugin>
<groupId>com.blabla.stpadmin</groupId>
<artifactId>maven-url-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>stop-stpadmin-service</id>
<phase>deploy</phase>
<goals>
<goal>get</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>deploy</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.blabla.stpadmin</groupId>
<artifactId>maven-url-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>start-stpadmin-service</id>
<phase>deploy</phase>
<goals>
<goal>get</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>
答案 0 :(得分:11)
您可以将每个插件的执行绑定到同一个阶段,它们将按您指定的顺序执行。请注意,它们将在部署目标运行后执行,因此您可能希望将它们绑定到上一阶段(安装)
更新:为了确保执行 - 执行和执行 - 执行目标在依赖插件执行周围执行,您需要确保它们是在单独的插件中定义的。否则,两个配置将合并并顺序执行。
如果需要在同一个插件中定义两个执行,则可以通过定义自定义生命周期并在通过执行注释执行Mojo之前调用该生命周期来完成此操作。在this answer中,我描述了如何创建自定义生命周期并强制在运行插件之前调用它。如果您配置执行后目标来调用依赖项插件,您将获得所需的执行顺序(您甚至可以在该生命周期中调用执行前目标同样)。
以下示例将在部署阶段按顺序执行三个插件:
<plugin>
<groupId>custom.url.plugin</groupId>
<artifactId>maven-url-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>execution-before</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>custom.url.plugin</groupId>
<!--specify final execution in a different plugin to
avoid the configurations being merged-->
<artifactId>maven-url-2-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>execution-after</goal>
</goals>
</execution>
</executions>
</plugin>