一、生命周期
Maven 有以下三个标准的生命周期:
- clean:项目清理的处理
- default(或 build):项目部署的处理
- site:项目站点文档创建的处理
而每一个生命周期又包括若干阶段。
1.Clean 生命周期
阶段:
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作
2.Default (Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:
生命周期阶段 | 描述 |
---|---|
validate | 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。 |
initialize | 初始化构建状态,例如设置属性。 |
generate-sources | 生成编译阶段需要包含的任何源码文件。 |
process-sources | 处理源代码,例如,过滤任何值(filter any value)。 |
generate-resources | 生成工程包中需要包含的资源文件。 |
process-resources | 拷贝和处理资源文件到目的目录中,为打包阶段做准备。 |
compile | 编译工程源码。 |
process-classes | 处理编译生成的文件,例如 Java Class 字节码的加强和优化。 |
generate-test-sources | 生成编译阶段需要包含的任何测试源代码。 |
process-test-sources | 处理测试源代码,例如,过滤任何值(filter any values)。 |
test-compile | 编译测试源代码到测试目的目录。 |
process-test-classes | 处理测试代码文件编译后生成的文件。 |
test | 使用适当的单元测试框架(例如JUnit)运行测试。 |
prepare-package | 在真正打包之前,为准备打包执行任何必要的操作。 |
package | 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。 |
pre-integration-test | 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。 |
integration-test | 处理和部署必须的工程包到集成测试能够运行的环境中。 |
post-integration-test | 在集成测试被执行后执行必要的操作。例如,清理环境。 |
verify | 运行检查操作来验证工程包是有效的,并满足质量要求。 |
install | 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。 |
deploy | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。 |
3.Site 生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
二、阶段
生命周期所包含的阶段是有前后顺序的,并且后面的阶段依赖于前面的阶段。
1.阶段的使用
在执行maven命令时,mvn命令之后使用的参数便是maven的各个阶段。
mvn compile
此命令使用了deault周期的compile阶段。
mvn clean deploy
此命令使用了clean周期的clean阶段和default周期的deploy阶段。
2.阶段顺序
在调用maven的阶段时,会顺序执行本生命周期当前阶段之前的所有阶段,直至当前阶段。
例如:clean周期共有3个阶段,按顺序分别如下:
1. pre-clean
2. clean
3. post-clean
当执行命令
mvn clean
执行了clean同期的pre-clean和clean,共2个阶段。
当执行命令
mvn compile
compile阶段属于default周期,而default周期有23个阶段,compile排序第7位,所以实际执行了default周期的第1阶段validate至第7阶段compile,共7个阶段。包括:
1. validate
2. initialize
3. generate-sources
4. process-sources
5. generate-resources
6. process-resources
7. compile
那么各个阶段到底是如何执行的呢?Maven内部是通过插件中的目标来实现。
三、插件(plugin)和目标(goal)
Maven的操作是基于不同的插件的不同目标来实现的。
一个插件中包括若干目标,而每个目标会执行一个特定的任务task。
例如:
mvn clean
在上面这个命令中,使用的参数是clean阶段,而实际执行的是maven-clean-plugin插件的clean目标。
因为clean周期的clean阶段是默认绑定到clean插件的clean目标绑定的。
1.常用的插件
1. maven-clean-plugin
2. maven-resouces-plugin
3. maven-compiler-plugin
4. maven-deploy-plugin
5. maven-surefire-plugin
6. maven-install-plugin
2.直接运行插件
可使用“插件名:目标名”的参数形式直接运行某插件的某目标。
例如:
mvn dependency:copy-dependencies
以上命令执行了dependency插件的copy-dependencies目标。
3.阶段(phase)和插件目标(goal)可以同时使用
例如:
mvn clean dependency:copy-dependencies package
以上命令执行了clean周期的pre-clean和clean阶段,dependency插件的copy-dependencies目标,default周期package阶段及package之前的所有阶段。