我想在我的插件中创建一个执行顺序,该顺序围绕一个 Maven 插件,并在执行另一个 Maven 插件之前和之后。所有 3 次执行都是部署阶段的一部分。
这是我想做的一个例子:
注意: url:get 是我自己的 custo mojo,只是使用 commons httpClient 执行一个 http get。
我通常会在下一阶段附加插件执行后,但不幸的是,部署是 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>
最佳答案
您可以将每个插件的执行绑定(bind)到同一阶段,它们将按照您指定的顺序执行。请注意,它们将在部署目标运行后执行,因此您可能希望将它们绑定(bind)到上一个阶段(安装)
更新:为了确保执行前和执行后目标围绕依赖插件执行执行,您需要确保它们在单独的插件中定义。否则这两个配置将被合并并按顺序执行。
如果需要在同一个插件中定义两个执行,您可以通过定义自定义生命周期并在 Mojo 通过 execute 注释执行之前调用该生命周期来完成此操作。在 this answer我描述了如何创建自定义生命周期并强制在插件运行之前调用它。如果您将 execute-after 目标配置为调用依赖插件,您将获得所需的执行顺序(您甚至可以在该生命周期中调用 execute-before 目标)。
下面的示例将在部署阶段按顺序执行三个插件:
<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>
关于maven-2 - 如何在另一个插件执行前后声明一个maven插件的执行前后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467509/