maven生命周期和插件

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-cleanmaven-clean-plugin:clean
clean
post-clean

default生命周期阶段与插件绑定情况及具体任务:

生命周期阶段插件目标执行任务
process-resourcesmaven-resources-plugin:resources复制主资源文件到输出 目录
compilemaven-compiler-plugin:compile编译主代码到输出目录
process-test-resourcesmaven-resources-plugin:testResources复制测试资源文件到输 出目录
test-compilemaven-compiler-plugin:testCompile编译测试代码到输出目 录
testmaven-surefire-plugin:test执行测试用例
packagemaven-jar-plugin:jar创建项目jar包
installmaven-install-plugin:install将项目输出构件安装到 本地仓库
deploymaven-deploy-plugin:deploy将项目输出构件部署到 远程仓库

site生命周期阶段与插件绑定情况:

生命周期阶段插件目标
pre-sitemaven-site-plugin:site
site
post-site
site-deploymaven-site-plugin:deploy

如,对项目执行 mvn clean install 命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
--- maven-clean-plugin:2.5:clean (default-clean) @ viswcm-project ---
[INFO] Deleting D:\workspace\viswcm-project\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ viswcm-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ viswcm-project ---
[INFO] Compiling 20 source files to D:\workspace\viswcm-project\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ viswcm-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\workspace\viswcm-project\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ viswcm-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ viswcm-project ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ viswcm-project ---
[INFO] Building jar: D:\workspace\viswcm-project\target\viswcm-project-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ viswcm-project ---
[INFO] Installing D:\workspace\viswcm-project\target\viswcm-project-0.0.1-SNAPSHOT.jar to D:\64\m2\repository\com\visgreat\viswcm-project\0.0.1-SNAPSHOT\viswcm-project-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\workspace\viswcm-project\pom.xml to D:\64\m2\repository\com\visgreat\viswcm-project\0.0.1-SNAPSHOT\viswcm-project-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

其输出结果和上面的表格描述一致。

自定义插件绑定

除了maven内置绑定,我们还可以自行绑定某个插件到某个生命周期的某个阶段。

比如要生成项目源码jar包,我们可以将maven-source-plugin插件配置到default生命周期的verify阶段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

上述配置描述了maven-source-plugin插件坐标外,还有插件执行配置executions元素下的每个execution子元素可以用来配置执行一个任务。这里配置了一个id为attach-sources的任务,通过phase元素,将其绑定到verify阶段上,再通过goals配置指定执行的插件目标。

运行mvn verify

1
2
[INFO] --- maven-source-plugin:2.1.1:jar-no-fork (attach-sources) @ viswcm-project ---
[INFO] Building jar: D:\workspace\viswcm-project\target\viswcm-project-0.0.1-SNAPSHOT-sources.jar

获取插件信息

maven官方插件:http://maven.apache.org/plugins/index.html

maven官方插件下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/

配置插件仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven.Plugin.Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>

《Maven实战》读书笔记

请作者喝瓶肥宅水🥤

0