Maven 生命周期与插件
2014-09-24 09:00
239 查看
1 生命周期
Maven生命周期就是为了对所有构建过程进行抽象和统一。生命周期包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤,所有项目的构建都能映射到这样一个生命周期上。
2 生命周期详解
Maven拥有三套相互独立的生命周期,它们分别为clean、default和site。Clean生命周期的目的是清理项目,default的生命周期目的是构建项目,而site生命周期的目的是建立项目站点,这三套生命周期是相互独立的,例如当用户调用default生命周期的compiler阶段的时候,也不会触发clean生命周期的任何阶段。
2.1 Clean生命周期:
pre-clean、clean、post-clean。
2.2 default生命周期:
Default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分,其包含阶段如下:
)validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compiler
process-classes
generate-test-sources
process-test-sources
generate-test-resources
test-compiler
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install
deploy
2.3 site生命周期:
site生命周期的目的是建立和发布站点
pre-site:执行一些在生成项目站点之前需要完成的工作
site:生存项目站点文档
post-site:执行一些在生成项目站点之后需要完成的工作
site-deploy:将生成的项目站点发布到服务器上
命令行与生命周期:
mvn clean: pre-clean和clean
mvn test: default生命周期validate, initialize到test有所有阶段
mvn clean install: clean生命周期的clean阶段、default生命周期的install阶段
mvn clean deploy site-deploy:clean周期的clean阶段、default生命周期的deploy阶段、site生命周期的site-deploy阶段。
3 插件目标
Maven的核心仅仅是定义了抽象的生命周期,具体任务是由插件完成了,插件以独立的形式存在,同一个插件可以做很多事情,针对每一件事情,都可以称为一个插件的目标。
Maven-dependency-plugin有十多个目标,主要有dependency:analyze、dependency:tree、dependency:list。
4 插件绑定
5 插件配置
很多插件目标的参数都支持从命令行进行配置,用户可以在maven命令中使用-D参数,并伴随一个参数键=参数值的形式,来配置插件的目标参数,例如 maven-surefire-plugins的maven.test.skip参数
mvn install –Dmaven.test.skip=true
6 获取插件信息
http://maven.apache.org/plugins/index.htm
http://repo1.maven.org/maven2/org/apache/maven/plugins
7 插件解析机制
7.1 插件仓库
与依赖构件一样,插件构件同样基于坐标存储在Maven仓库。在需要的时候,首先会从本地仓库查找,如果本地仓库不存在,就从远程插件仓库查找,然后再下载。
当Maven需要的依赖在本地仓库不存在的时候,它会去所配置的远程仓库查找,可是当Maven需要的插件在本地仓库不存在的时候,它就不会去这些远程仓库查找。
插件默认的groupId不存在的时候,会自动用默认groupId为org.apache.maven.plugins补齐,但不推荐在实际中这么用。
当用户没有指定核心插件版本的情况下,Maven会自动解析插件版本,Maven使用核心插件的时候它们的版本就已经确定了。这些插件包括maven-clean-plugin、maven-compiler-plugin、maven-surefire-plugin。
如果用户使用某个插件时没有设定版本,而这个插件又不属于核心插件的范畴,Maven就会去检查所有仓库中可用版本,然后做出选择。以maven-compiler-plugin为例,它在中央仓库的仓库元数据为http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/maven-metatata.xml。内容如下:
使用插件的时候,应该一直显式地设定版本,这也解释了Maven为什么要在超级POM中为核心插件设定版本。
6.7.3 解析插件前缀
插件仓库元数据:
当Maven解析到dependency:tree这样的命令后,它首先基于默认的groupId归并所有插件仓库的元数据org/apache/maven/plugins/maven-metadata.xml;其次检查归并后的元数据,找到对应的artifactId为maven-dependency-plugin,然后得到version。
Maven生命周期就是为了对所有构建过程进行抽象和统一。生命周期包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤,所有项目的构建都能映射到这样一个生命周期上。
2 生命周期详解
Maven拥有三套相互独立的生命周期,它们分别为clean、default和site。Clean生命周期的目的是清理项目,default的生命周期目的是构建项目,而site生命周期的目的是建立项目站点,这三套生命周期是相互独立的,例如当用户调用default生命周期的compiler阶段的时候,也不会触发clean生命周期的任何阶段。
2.1 Clean生命周期:
pre-clean、clean、post-clean。
2.2 default生命周期:
Default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分,其包含阶段如下:
)validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compiler
process-classes
generate-test-sources
process-test-sources
generate-test-resources
test-compiler
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install
deploy
2.3 site生命周期:
site生命周期的目的是建立和发布站点
pre-site:执行一些在生成项目站点之前需要完成的工作
site:生存项目站点文档
post-site:执行一些在生成项目站点之后需要完成的工作
site-deploy:将生成的项目站点发布到服务器上
命令行与生命周期:
mvn clean: pre-clean和clean
mvn test: default生命周期validate, initialize到test有所有阶段
mvn clean install: clean生命周期的clean阶段、default生命周期的install阶段
mvn clean deploy site-deploy:clean周期的clean阶段、default生命周期的deploy阶段、site生命周期的site-deploy阶段。
3 插件目标
Maven的核心仅仅是定义了抽象的生命周期,具体任务是由插件完成了,插件以独立的形式存在,同一个插件可以做很多事情,针对每一件事情,都可以称为一个插件的目标。
Maven-dependency-plugin有十多个目标,主要有dependency:analyze、dependency:tree、dependency:list。
4 插件绑定
5 插件配置
很多插件目标的参数都支持从命令行进行配置,用户可以在maven命令中使用-D参数,并伴随一个参数键=参数值的形式,来配置插件的目标参数,例如 maven-surefire-plugins的maven.test.skip参数
mvn install –Dmaven.test.skip=true
6 获取插件信息
http://maven.apache.org/plugins/index.htm
http://repo1.maven.org/maven2/org/apache/maven/plugins
7 插件解析机制
7.1 插件仓库
与依赖构件一样,插件构件同样基于坐标存储在Maven仓库。在需要的时候,首先会从本地仓库查找,如果本地仓库不存在,就从远程插件仓库查找,然后再下载。
当Maven需要的依赖在本地仓库不存在的时候,它会去所配置的远程仓库查找,可是当Maven需要的插件在本地仓库不存在的时候,它就不会去这些远程仓库查找。
插件默认的groupId不存在的时候,会自动用默认groupId为org.apache.maven.plugins补齐,但不推荐在实际中这么用。
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">7.2 解析插件版本</span>
当用户没有指定核心插件版本的情况下,Maven会自动解析插件版本,Maven使用核心插件的时候它们的版本就已经确定了。这些插件包括maven-clean-plugin、maven-compiler-plugin、maven-surefire-plugin。
如果用户使用某个插件时没有设定版本,而这个插件又不属于核心插件的范畴,Maven就会去检查所有仓库中可用版本,然后做出选择。以maven-compiler-plugin为例,它在中央仓库的仓库元数据为http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/maven-metatata.xml。内容如下:
<?xml version=’1.0’ encoding=’UTF-8’ ?> <metadata> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugins</artifactId> <versioning> <latest>2.1</latest> <release>2.1</release> <versions> <version>2.0-beta-1</version> <version>2.0</version> <version>2.0.1</version> <version>2.0.2</version> <version>2.1</version> </versions> <lastUpdated>20100102092331</lastUpdated> </versioning> </metadata>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Maven遍历本地仓库和所有远程插件仓库,将该路径下的仓库元数据归并后,就能计算出latest和release的值,Maven会将版本解析为所有仓库中最新版本,而这个版本也可能是快照版本。</span>
使用插件的时候,应该一直显式地设定版本,这也解释了Maven为什么要在超级POM中为核心插件设定版本。
6.7.3 解析插件前缀
插件仓库元数据:
<metadata> <plugins> <plugin> <name>Maven Clean Plugin</name> <prefix>clean</prefix> <artifactId>maven-clean-plugin</artifactId> </plugin> <plugin> <name>Maven Compiler Plugin</name> <prefix>compiler</prefix> <artifactId>maven-compiler-plugin</artifactId> </plugin> <plugin> <name>Maven Dependency Plugin</name> <prefix>dependency</prefix> <artifactId>maven-dependency-plugin</artifactId> </plugin> </plugins> </metadata>
当Maven解析到dependency:tree这样的命令后,它首先基于默认的groupId归并所有插件仓库的元数据org/apache/maven/plugins/maven-metadata.xml;其次检查归并后的元数据,找到对应的artifactId为maven-dependency-plugin,然后得到version。
相关文章推荐
- maven 插件和生命周期
- Maven 生命周期与插件
- Maven入门指南⑦:Maven的生命周期和插件
- Maven入门指南⑦:Maven的生命周期和插件
- 是goal还是phase?Maven插件(plugin)goal的执行与生命周期(lifecycle)phase的关系
- maven中的生命周期和插件
- maven-生命周期与插件
- Maven插件(plugin)goal的执行与生命周期(lifecycle)phase的关系
- MAVEN学习笔记之Maven生命周期和插件简介(3)
- 一起学Maven(Maven中的生命周期与插件机制)<七>
- 项目构建之maven篇:6.生命周期与插件
- maven 父子项目 聚合与继承 生命周期 打包插件 依赖打包 jar pom war
- maven的仓库、生命周期与插件
- maven生命周期和插件
- maven(7)生命周期和插件
- maven详解之生命周期与插件(二)
- 【JavaWeb-28】Maven仓库、目录结构、命令和生命周期、添加jar包和插件
- Maven学习(四)-- 生命周期和插件
- maven 生命周期及插件(六)
- Maven3实战笔记04Maven的生命周期和插件