自定义生命周期必须在插件项目的META-INF/maven/lifecycle.xml
文件中定义。你可以引入这个定义在src/main/resources
下的META-INF/maven/lifecycle.xml
文件。以下的lifecycle.xml
声明了一个名为zipcycle
的生命周期,它在package
阶段包含了一个zip
目标。
Example 17.9. 在lifecycle.xml中自定义生命周期
<lifecycles> <lifecycle> <id>zipcycle</id> <phases> <phase> <id>package</id> <executions> <execution> <goals> <goal>zip</goal> </goals> </execution> </executions> </phase> </phases> </lifecycle> </lifecycles>
如果你想要在另一个构建中运行这个zipcycle
生命周期,你可以创建一个ZipForkMojo
,然后使用@execute
注解来告诉Maven,当ZipForkMojo
运行的时候,逐步通过zipcycle
生命周期的阶段。
Example 17.10. 在Mojo中Fork一个自定义生命周期
/** * Forks a zip lifecycle. * @goal zip-fork * @execute lifecycle="zipcycle" phase="package" */ public class ZipForkMojo extends AbstractMojo { public void execute() throws MojoExecutionException { getLog().info( "doing nothing here" ); } }
运行ZipForkMojo
的时候会fork出另一个生命周期。如果你配置了你插件的前缀为zip,运行zip-fork
会得到类似于如下输出的结果:
$ mvn zip:zip-fork [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'zip'. [INFO] ---------------------------------------------------------------------------- [INFO] Building Maven Zip Forked Lifecycle Test [INFO] task-segment: [zip:zip-fork] [INFO] ---------------------------------------------------------------------------- [INFO] Preparing zip:zip-fork [INFO] [site:attach-descriptor] [INFO] [zip:zip] [INFO] Building zip: ~/maven-zip-plugin/src/projects/zip-lifecycle-test/target/output.zip [INFO] [zip:zip-fork] [INFO] doing nothing here [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1 second [INFO] Finished at: Sun Apr 29 16:10:06 CDT 2007 [INFO] Final Memory: 3M/7M [INFO] ------------------------------------------------------------------------
调用zip-fork
会衍生出另外一个生命周期,Maven运行zipcycle
生命周期,然后从ZipFormMojo
的execute方法打印信息。