1.引入
各种项目构建的流程大体是相似的,因此Maven引入生命周期来对项目构建过程进行抽象和统一。
2.生命周期
Maven生命周期不是一个整体,而是三套相互独立的生命周期,分别为Clean、Default和Site。每套生命周期又由不同阶段phase组成。
-
Clean
pre-clean- 清理前做的工作clean- 清理上一次构建生成的文件post-clean- 清理后做的工作
-
Default(下面只包含部分阶段)
validate- 检查项目正确性和必要信息是否存在compile- 编译项目源代码test- 使用合适的单元测试框架测试编译后的代码,不需要代码打包或发布package- 用合适的分发格式打包编译后的代码verify- 检查集成测试的结果是否符合质量标准install- 将包安装到Maven本地仓库,给本地的其他Maven项目使用deploy- 将最终的包复制的远程仓库,供其他开发人员和Maven项目使用
-
Site
pre-site- 生成项目站点前做的工作site- 生成项目站点文档post-site- 生成项目站点后做的工作site-deploy- 将站点发布到服务器上
生命周期的阶段具有前后依赖关系,例如执行
test会按照validate compile ...的顺序执行过来。
3.插件
-
Maven生命周期是抽象的,其实际行为都由插件完成(类似于模板方法)。
-
对于插件本身,它被设计成具有多种功能,一种功能对应一个插件目标。
-
生命周期阶段和插件目标相互绑定,以完成某个具体的构建任务。
-
为了方便构建Maven项目,Maven为主要的生命周期阶段绑定了默认的插件。
-
也可以在POM文件中自定义生命周期阶段绑定的插件(下面将
verify阶段和maven-source-plugin的jar-no-fork插件目标相绑定):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>