我正在写一个Maven插件(Mojo),它需要在运行之前执行一组标准的其他插件执行。如何在我的Maven插件运行之前执行一组目标?
是否有一种机制来声明我的插件中的所有目标,所以我不必依赖用户在他们的POM中定义它们?
我正在写一个Maven插件(Mojo),它需要在运行之前执行一组标准的其他插件执行。如何在我的Maven插件运行之前执行一组目标?
是否有一种机制来声明我的插件中的所有目标,所以我不必依赖用户在他们的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 /资源/ META-INF /行家/ lifecycle.xml一个自定义的生命周期。
生命周期有点像plexus的components.xml,但允许您为这些目标指定配置。
请注意,语法与pom中的插件配置略有不同。您使用以下方法定义一个目标:作为分隔符而不是指定单独的groupId,artifactId和版本元素,否则它与pom中的插件配置的执行元素基本相同。你甚至可以在lifecycle.xml中使用一些属性(尽管可能不是所有的属性都支持,我需要检查它)。
下面的示例与进程中的资源相不同的配置调用的依赖性插件两次:
<lifecycles>
<lifecycle>
<id>download-dependencies</id>
<phases>
<phase>
<id>process-resources</id>
<executions>
<execution>
<goals>
<goal>
org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
</goal>
</goals>
<configuration>
<includeScope>compile</includeScope>
<includeTypes>war</includeTypes>
<overWrite>true</overWrite>
<outputDirectory>
${project.build.outputDirectory}/wars
</outputDirectory>
</configuration>
</execution>
<execution>
<goals>
<goal>
org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
</goal>
</goals>
<configuration>
<includeScope>compile</includeScope>
<includeTypes>jar</includeTypes>
<overWrite>true</overWrite>
<outputDirectory>
${project.build.outputDirectory}/jars
</outputDirectory>
</configuration>
</execution>
</executions>
</phase>
</phases>
</lifecycle>
</lifecycles>
通过这种方法,依赖插件将被用在叉形的process-resources
相位每个配置调用一次生命周期(全部发生在Mojo定义的执行中)。
在lifecycle.xml中,可以定义多个阶段以及生命周期的每个阶段的多个执行。可用阶段在Maven lifecycle中定义。
您可以在Maven书籍的Creating a Custom Lifecycle部分找到关于生命周期的更多信息。尽管如此,它并没有给出详尽的清单。唯一的其他参考我知道如果是从Maven 2 alpha,所以可能不是最新的
谢谢这看起来应该工作。你知道我在哪里可以找到在lifecycle.xml中允许哪些内容? – 2009-09-15 15:13:04
我已经添加了一些引用到答案的结尾。我不知道规范的引用,虽然 – 2009-09-15 15:39:59
存在Maven的Lifecycle.xml引用[here](http://maven.apache.org/ref/2.2.1/maven-plugin-descriptor/lifecycle-mappings.html),尽管它没有比例子提供的更多的信息。 – prunge 2012-03-13 04:02:41