你已经创建了自己的生命周期,并能在一个Mojo中将其衍生使用。下一个你可能要问的问题是,如何覆盖默认的生命周期。如何如何创建定制的生命周期并将其绑定到项目上?在Chapter 10, 构建生命周期中,我们看到了项目的打包类型定义了项目的生命周期。所有打包类型都有差异;war绑定不同的目标到package阶段,自定义的生命周期如来自Israfil Flex 3的swf绑定不同的目标到compile阶段。在你创建自定义生命周期的时候,你可以通过为插件提供一些Plexus配置,将生命周期绑定到特定的打包类型。
要为新的生命周期定义新的打包类型,你需要配置Plexus中的LifecycleMapping组件。在你的插件项目中,在src/main/resources下创建一个META-INF/plexus/components.xml文件。在这个components.xml中添加如Example 17.11, “覆盖默认生命周期”的内容。在role-hint下设置打包类型的名称,在pheases中设置包含所有需要绑定目标的坐标(省略version)。多个目标可以用逗号分隔,绑定到同一个阶段。
Example 17.11. 覆盖默认生命周期
<component-set>
<components>
<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>zip</role-hint>
<implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
<configuration>
<phases>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
<package>org.sonatype.mavenbook.plugins:maven-zip-plugin:zip</package>
</phases>
</configuration>
</component>
</components>
</component-set>
如果你创建了一个插件,它定义了新的打包类型和定制的生命周期,Maven在将你的插件添加到项目POM中并设置extensions元素为true之前,对你插件的定义一概不知。只有在那之后,Maven才会扫描你的插件,而不仅仅只是运行Mojo,它会查找META-INF/plexus下的components.xml文件,然后它会在你的项目中使新的打包类型可用。
Example 17.12. 作为一个Extension配置一个插件
<project>
...
<build>
...
<plugins>
<plugin>
<groupId>com.training.plugins</groupId>
<artifactId>maven-zip-plugin</artifactId>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
一旦你添加了插件,并将extensions元素设置成true,你就可以使用这个定制的打包类型,你的项目就能运行关联到该打包类型的定制生命周期。

