maven生命周期和插件
生命周期
maven的生命周期有三套,互相独立。每个生命周期含有不同阶段,常用如下
- clean 清理项目
- pre-clean 执行清理前需要完成的工作
- clean 清理上一次构建生成的文件
- post-clean 执行清理后需要完成的工作
- default 构建项目
- validate 验证项目正确,所有必需的信息都有
- initialize 初始化编译状态,例如创建target文件夹
- generate-source
- process-source 主资源文件变量替换,复制至主classpath目录
- generate-resources
- process-resources
- compile 编译主源码至主classpath目录
- process-classes
- generator-test-sources
- process-test-sources 测试资源文件变量替换,复制至测试classpath目录
- generate-test-resources
- process-test-resources
- test-compile 编译测试源码至测试classpath目录
- process-test-classes
- test 执行测试case,测试代码不会被打包
- prepare-package
- package 将编译好的代码打包成可发布的格式
- pre-integration-test
- integration-test
- post-integration-test
- verify 核实包是有效合规,达到质量标准
- install 将包安装到maven本地仓库
- deploy 将包复制到远程仓库
- site 构件站点
- pre-site
- site 生成项目站点文档
- post-site
- site-deploy 将生成的项目站点发布到服务器上
maven命令可以调用maven的生命周期阶段完成构建,不同生命周期无依赖,同一生命周期的阶段前后是有依赖的。
example:
mvn clean install site
插件
插件目标是插件对应的某一种功能,可以和maven生命周期的阶段绑定。
默认绑定
生命周期阶段 | 插件目标 |
---|---|
process-resources | maven-resource-plugin:resources |
compile | maven-compiler-plugin:compile |
process-test-resource | maven-resource-plugin:testResources |
test-compile | maven-compile-plugin:testCompile |
test | maven-surefire-plugin:test |
package | maven-jar-plugin:jar |
install | maven-install-plugin:install |
deploy | maven-deploy-plugin:deploy |
自定义绑定
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>attach source</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
上面的代码创建了一个自定义的绑定,在verify
阶段绑定了maven-source-plugin:jar-no-fork
插件目标。作用是在verify阶段生成项目源码包,调用命令为maven verify
。
插件配置
-
命令行配置
使用-D
参数配置,例如mvn package -Dmaven.test.skip=true
-
pom文件配置
使用<plugin>
标签内的<configration>
配置,例如<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>上面的代码配置了compile插件编译1.8版本的源文件
描述插件
插件解析机制
maven命令也可以调用maven的插件目标来完成构建。
分析命令
mvn dependency:tree
插件的定位也需要三要素:groupid,artifactid,version。在上述命令中dependency
称为插件前缀,tree
称为插件目标。根据插件前缀定位插件坐标。
- 获取插件meta.xml信息。插件仓库的默认地址是http://repo1.maven.org/maven2/org/apache/maven/plugins。获取该目录下的maven-metadata.xml。
-
查找前缀对应的artifactid为
maven-dependency-plugin
,因为查得到所以确认groupid为org.apache.maven.plugins
,如果查不到则会去配置的其它仓库重复步骤1,所有配置的仓库均找不到则报错。<plugin>
<name>Apache Maven Dependency Plugin</name>
<prefix>dependency</prefix>
<artifactId>maven-dependency-plugin</artifactId>
</plugin> - 确定好插件的groupid和artifactid,根据这两个信息查找插件的metadata.xml,地址为http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/maven-metadata.xml,版本信息即可确定,maven 3默认使用release版本,所以version为
2.10
-
所以实际执行的命令为
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree