构建生命周期足够简单,但是当需要为项目配置Maven构建时,如何将任务分配到每个构建阶段呢?
1.打包
第一种也是常见的方法是通过同样命名的POM元素<packaging>为项目设置打包。一些有效的打包值是JAR、WAR、EAR和POM。如果没有指定包装值,就默认为JAR。
每个不同类型的打包都包含要绑定到特定阶段的目标列表。例如打包值是JAR,将绑定表2-1所示的目标来构建默认生命周期的阶段。
表2-1 打包值是JAR所绑定的目标
可以这么理解,阶段列是简化的命令,插件:目标列是详细的插件加目标(命令行参数)的形式。需要注意的是,Maven都是以插件的形式存在的,包括生命周期的阶段也是一个个不同的插件组成的,比如compile阶段就是由compiler插件提供的,其中compile为这个插件的目标,也可以说是插件的命令行参数。
不同的打包方式所要绑定的阶段是不同的。例如,纯粹的元数据(打包值是POM)的项目只将目标绑定到install和deploy阶段。
注意,对于某些可用的打包类型,可能还需要在POM的<build>部分包含一个特定的插件,并为该插件指定<extensions>true</extensions>。需要这种插件的一个例子是Plexus插件,它提供plexus-application和plexus-service打包。
2.插件
将目标添加到阶段的第二种方法是在项目中配置插件。插件是为Maven提供目标的工件。此外,插件可以具有一个或多个目标,其中每个目标代表该插件的能力。例如,compiler插件有两个目标:compile和testCompile。前者编译主代码的源代码,后者编译测试代码的源代码。
插件可以包含指示将目标绑定到的生命周期阶段的信息。注意,只添加插件是不够的,还必须要指定目标。如果有多个目标绑定到特定阶段,则使用的顺序是首先执行来自打包的顺序,然后才是在POM中配置顺序。注意,可以使用<executions>元素来获得对特定目标的顺序更多的控制。
例如,Modello插件默认将目标modello:java绑定到generate-sources阶段(注意:modello:java目标生成Java源代码)。因此,要使用Modello插件,从模型生成的源代码并将其合并到构建中,配置如下:
现在,在modello:java的情况下,它只在generate-sources阶段才有意义。但是一些目标可以在多个阶段中使用。例如,假设有一个目标display:time,希望它在process-test-resources阶段运行时开始执行,则可以被配置如下: