如何在我的Maven插件运行之前执行一组目标?

我正在编写一个Maven插件(Mojo),它需要在运行之前执行一组标准的其他插件执行。

有没有一种机制来声明我的插件中的所有目标,所以我不必依赖用户在他们的POM中定义所有目标?

您可以通过定义自定义生命周期并在通过execute注释执行Mojo之前调用该生命周期来完成此操作。

在你的Mojo中,在Javadoc中声明要执行的生命周期:

 /** * Invoke the custom lifecycle before executing this goal. * * @goal my-goal * @execute lifecycle="my-custom-lifecycle" phase="process-resources" */ public class MyMojo extends AbstractMojo { ... 

然后在src / main / resources / META-INF / maven / lifecycle.xml中定义自定义生命周期。

生命周期有点像plexus的components.xml,但允许您为这些目标指定配置。

请注意,语法与pom中的插件配置略有不同。 您可以使用以下方法定义目标:作为分隔符而不是指定单独的groupId,artifactId和version元素,否则它与pom中插件配置的执行元素大致相同。 你甚至可以在lifecycle.xml中使用一些属性(虽然可能不支持所有属性,但我需要检查它)。

以下示例在process-resources阶段使用不同的配置调用依赖项插件两次:

   download-dependencies   process-resources     org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies    compile war true  ${project.build.outputDirectory}/wars       org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies    compile jar true  ${project.build.outputDirectory}/jars         

使用这种方法,依赖插件将在分叉生命周期的process-resources阶段中的每个配置调用一次(所有这些都发生在Mojo中定义的执行中)。

在lifecycle.xml中,您可以定义多个阶段,并在生命周期的每个阶段定义多个执行。 可用阶段在Maven生命周期中定义。

您可以在Maven书籍的“ 创建自定义生命周期”部分中找到有关生命周期的更多信息。 它没有详尽列出允许的内容。 我知道的唯一其他参考是来自Maven 2 alpha ,所以可能不是最新的