maven生命周期(lifecycle)对构建的过程进行了抽象和统一,实际的工作是由对应的插件(plugins)来完成的。
maven生命周期
maven生命周期可以分为三个部分:
clean生命周期
该周期的任务是清理项目,包含三个阶段:
pre-clean | 执行清理前需要完成的工作 |
clean | 清理上一次构建生成的文件 |
post-clean | 执行清理后需要完成的工作 |
default生命周期
default生命周期定义了真正构建时需要的所有步骤。
validate | 验证项目是正确的,所有必要的信息是可用的 |
initialize | 初始化构建状态,例如:设置属性或创建目录 |
generate-sources | 生成编译期的源代码。 |
process-sources | 处理项目主资源文件。一般来说是对src/main/resources目录内容 进行变量替换等工作后,复制到项目输出的主目录classpath目录中 |
generate-resources | 生成包含在打包过程中的资源 |
process-resources | 复制和处理资源到目标目录,准备打包 |
compile | 编译项目的源代码 |
process-classes | 处理编译后生成的class文件 |
generate-test-sources | 生成编译期内的测试源代码 |
process-test-sources | 处理测试源代码,如过滤一些值 |
generate-test-resources | 创建测试资源 |
process-test-resources | 复制测试资源到目标目录并处理 |
test-compile | 编译测试源代码到测试目标目录 |
process-test-classes | 处理编译测试代码后生成的class文件 |
test | 使用合适的单元测试框架运行测试。 这些测试代码不会被打包和 部署 |
prepare-package | 执行打包前需要的任何工作 |
package | 接收编译好的代码,打包成可发布的格式,如jar,war等 |
pre-integration-test | 执行集成测试之前所需的操作 |
integration-test | 如果需要,可以将软件包处理和部署到可以运行集成测试的环境中 |
post-integration-test | 执行集成测试之后所需的操作 |
verify | 运行任何检查以验证程序包是否有效并符合质量标准 |
install | 将程序包安装到maven本地仓库,供本地其他maven项目使用 |
deploy | 将最终包复制到远程仓库,供其它开发人员和maven项目使用 |
site生命周期
site生命周期的作用是建立和发布项目站点。
pre-site | 执行一些在生成项目站点之前所需要完成的工作 |
site | 生成项目站点文档 |
post-site | 执行一些在生成项目站点之后需要完成的工作 |
site-deploy | 将生成的项目站点发布到服务器上 |
maven生命周期是相互依赖的关系,如执行
mvn clean
命令时,会执行pre-clean,clean阶段;执行mvn deploy
会执行default生命周期前面的所有阶段。
插件目标
maven生命周期的各个阶段是和插件绑定在一起的,一个插件可以包含多个功能,每个功能对应生命周期的一个阶段,并称其为插件目标。如:maven-dependency-plugin
包含插件目标:dependency:tree,dependency:list,dependency:analyze等。
内置绑定插件
maven在核心为一些主要的生命周期绑定了许多插件目标:
clean生命周期阶段与插件绑定情况:
生命周期阶段 | 插件目标 |
---|---|
pre-clean | maven-clean-plugin:clean |
clean | |
post-clean |
default生命周期阶段与插件绑定情况及具体任务:
生命周期阶段 | 插件目标 | 执行任务 |
---|---|---|
process-resources | maven-resources-plugin:resources | 复制主资源文件到输出 目录 |
compile | maven-compiler-plugin:compile | 编译主代码到输出目录 |
process-test-resources | maven-resources-plugin:testResources | 复制测试资源文件到输 出目录 |
test-compile | maven-compiler-plugin:testCompile | 编译测试代码到输出目 录 |
test | maven-surefire-plugin:test | 执行测试用例 |
package | maven-jar-plugin:jar | 创建项目jar包 |
install | maven-install-plugin:install | 将项目输出构件安装到 本地仓库 |
deploy | maven-deploy-plugin:deploy | 将项目输出构件部署到 远程仓库 |
site生命周期阶段与插件绑定情况:
生命周期阶段 | 插件目标 |
---|---|
pre-site | maven-site-plugin:site |
site | |
post-site | |
site-deploy | maven-site-plugin:deploy |
如,对项目执行 mvn clean install
命令:
1 | --- maven-clean-plugin:2.5:clean (default-clean) @ viswcm-project --- |
其输出结果和上面的表格描述一致。
自定义插件绑定
除了maven内置绑定,我们还可以自行绑定某个插件到某个生命周期的某个阶段。
比如要生成项目源码jar包,我们可以将maven-source-plugin插件配置到default生命周期的verify阶段:
1 | <build> |
上述配置描述了maven-source-plugin插件坐标外,还有插件执行配置executions元素下的每个execution子元素可以用来配置执行一个任务。这里配置了一个id为attach-sources的任务,通过phase元素,将其绑定到verify阶段上,再通过goals配置指定执行的插件目标。
运行mvn verify
:
1 | [INFO] --- maven-source-plugin:2.1.1:jar-no-fork (attach-sources) @ viswcm-project --- |
获取插件信息
maven官方插件:http://maven.apache.org/plugins/index.html
maven官方插件下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/
配置插件仓库
1 | <pluginRepositories> |
《Maven实战》读书笔记