Maven 是通过设计的插件机制来实现 Maven 构件项目的的周期. 比如 :编译周期有 maven-compiler-plugin, 而针对测试插件有 maven-surefire-plugin 等.Maven 拥有3套相互独立的生命周期,clean, default 和 site. clean 生命周期的目的是为了清理项目, default生命周期的目的是为了构件项目, site生命周期的目的是为了建立项目站点.
clean
| 阶段 | |
|---|---|
| pre-clean | 执行一些清理前需要完成的工作 |
| clean | 清理上一次构件生成的文件 |
| post-clean | 执行一些清理后需要完成的工作 |
default
| 阶段 | |
|---|---|
| validate | 验证项目是正确的, 所有重要的信息是可用 |
| initialize | 初始化构建状态, eg: 设置属性, 创建目录 |
| generate-sources | 编译原代码 |
| process-sources | 处理源代码, eg: 过滤一些值 |
| genreate-resources | 生成资源文件 |
| process-resources | 复制和处理资源到目标目录,准备进行打包 |
| compile | 编译项目的源代码 |
| process-classes | 处理编译生成文件, 比如JAVA文件的字节码 |
| generate-test-sources | 生成测试编译文件的 |
| process-test-sources | 处理测试源代码, eg: 过滤一些值 |
| genreate-test-resources | 创建测试配置文件 |
| process-test-resources | 复制和处理资源到测试目标目录 |
| test-compile | 编译项目测试的源代码到指定目录 |
| process-test-classes | 处理测试编译生成的文件 |
| test | 使用单元测试框架运行测试, 测试源代码不会被打包 |
| prepare-package | 准备打包版本 |
| package | 接收编译代码,打包成一个可发布格式,例如一个JAR |
| pre-integration-test | 集成到测试环境前需要采取的行动, eg: 配置测试环境 |
| integration-test | 处理,并部署包在中,集成到测试环境中(如果有必要) |
| post-integration-test | 进行集成测试执行后需要采取的行动 eg: 清理环境 |
| verify | 运行任何检查,以验证包是有效性,并符合标准 |
| install | 安装包到本地仓库,用作当地其他项目的依赖 |
| deploy | 将包部署到远程仓库, 与其他开发人员共享和项目 |
site
| 阶段 | |
|---|---|
| pre-site | 执行一些生成项目站点之前需要完成的工作 |
| site | 生成项目站点文件 |
| post-site | 执行一些生成项目站点之后需要完成的工作 |
| site-deploy | 将项目站点发布到服务器上 |
##命令对应的生命周期:
$mvn clean
调用 clean 生命周期的clean阶段. 实际执行阶段为 clean 生命周期的 pre-clean 和 clean阶段$mvn test
调用 default 生命周期的 test 阶段. 实际执行阶段为 default 生命周期的 validate , initialize等阶段, 直到 test 所有阶段$mvn clean install
调用 clean 生命周期的 clean 阶段和 default 生命周期的 install 阶段. 实际执行阶段为 clean 生命周期的 pre-clean 和 clean 阶段, 和 default 生命周期的 validate , initialize等阶段, 直到 install 所有阶段- $mvn clean deploy site-deploy
调用 clean 生命周期的 clean 阶段和 default 生命周期的 deploy 阶段, 以及 site 生命周期的 deploy-site 阶段. 实际执行阶段为 clean 生命周期的 pre-clean 和 clean 阶段, 和 default 生命周期的所有阶段, site 生命周期所有阶段.