Maven-构建生命周期

166 阅读2分钟

什么是构建生命周期

构建是一个复杂的过程,可以拆分为多个阶段,每个阶段执行特定的任务,比如创建->验证->编译->测试->打包,如果每个项目都周而复始地、顺序地经历这些阶段,这个循环周期就称之为项目的构建生命周期。

Maven的构建生命周期

Maven定义了三个生命周期,其中default为使用最多的生命周期。

  • clean
  • default
  • site

每个构建周期都被定义为一组阶段,每个阶段执行特定的任务,比如default构建周期包含了以下阶段(只是部分),其中compile负责编译项目源代码。

  • validate
  • compile
  • test
  • package
  • verify
  • install
  • deploy

注意,执行某个阶段时,先前的阶段也将顺序执行。

比如,运行命令maven package,实际运行的阶段为:

validate -> compile -> test -> package

使用构建生命周期

mvn [phase]

phase=compile|test|package|...

构建阶段如何执行任务

阶段本身只是个概念,没有任何执行逻辑,实际的任务执行是由插件完成。

以构建阶段compile为例,默认挂载了插件compilercompile任务,所以每次运行命令mvn compile时,实际执行的是插件compilercompile任务。

换句话说

mvn compile

等效于

mvn compiler:compile

从这点来看,阶段的意义就是缩短了命令行的长度。

构建阶段与插件任务的关系

1)一个阶段可以挂载多个插件任务,任务按挂载先后会被顺序执行。
2)同一个插件任务可以被挂载到多个构建阶段,且都会被执行一次
3)一个阶段也可以不挂载插件任务,这种构建阶段不会被执行

如何挂载插件任务到构建阶段

默认情况下,Maven为每个阶段都挂载了一个默认的插件任务,比如

compile <-- compiler:compile
//详情见官网

开发者也可以通过配置在构建阶段绑定插件任务,比如下面这个例子,将插件任务display-maven-plugin:time挂载到了构建阶段compile

...
 <plugin>
   <groupId>com.mycompany.example</groupId>
   <artifactId>display-maven-plugin</artifactId>
   <version>1.0</version>
   <executions>
     <execution>
       <phase>compile</phase>
       <goals>
         <goal>time</goal>
       </goals>
     </execution>
   </executions>
 </plugin>
...

之后运行mvn compile,执行完默认的compiler:compile任务后,就会执行display-maven-plugin:time任务。

小结

构建生命周期是Maven的核心概念,Maven定义了三个什么周期:clean、default、site,其中default最为常用;每个生命周期包含了一组阶段(phase),阶段可以挂载多个插件任务,日常开发使用到构建阶段命令,实际上任务执行是由插件实现的;Maven为每个阶段挂载一个默认的插件任务,开发者通过配置可以新增插件任务挂载到构建阶段。