你已经创建了自己的生命周期,并能在一个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,你就可以使用这个定制的打包类型,你的项目就能运行关联到该打包类型的定制生命周期。