Maven生命周期与插件
# Maven 生命周期与插件
# 生命周期
Maven 的构建生命周期描述了一次构建过程中经历的一系列阶段(Phase),这些阶段按顺序执行。
# 三套生命周期
Maven 有三套相互独立的生命周期,每套包含不同的阶段:
# 1. Clean 生命周期
负责清理之前的构建结果,为新的构建做准备。
| 阶段 | 说明 |
|---|---|
pre-clean | 执行清理前需要完成的工作 |
clean | 清理上一次构建生成的文件 |
post-clean | 执行清理后需要完成的工作 |
# 2. Default 生命周期
Maven 构建的核心生命周期,涵盖了从编译代码到打包和部署的整个过程。
| 阶段 | 说明 |
|---|---|
validate | 验证项目是否正确,所需信息是否完整 |
initialize | 初始化构建状态,如设置属性、创建目录 |
generate-sources | 生成编译需要的源代码 |
process-sources | 处理源代码,如替换变量 |
compile | 编译项目的源代码 |
process-classes | 处理编译生成的文件,如字节码增强 |
generate-test-sources | 生成测试需要的源代码 |
process-test-sources | 处理测试源代码 |
test-compile | 编译测试源代码 |
process-test-classes | 处理测试编译生成的文件 |
test | 运行单元测试 |
prepare-package | 打包前准备工作 |
package | 将编译后的代码打包成可分发的格式(JAR/WAR) |
integration-test | 处理并部署包到可运行集成测试的环境 |
verify | 检查包是否满足质量标准 |
install | 将包安装到本地仓库 |
deploy | 将包部署到远程仓库 |
# 3. Site 生命周期
用于生成项目报告和网站文档。
| 阶段 | 说明 |
|---|---|
pre-site | 执行生成站点前需要完成的工作 |
site | 生成项目的站点文档 |
post-site | 执行生成站点后需要完成的工作 |
site-deploy | 将生成的站点文档部署到服务器 |
# 生命周期的特点
- 阶段按顺序执行:执行某个阶段时,该阶段之前的所有阶段都会依次执行。例如执行
mvn install,会依次执行validate → compile → test → package → install。 - 三套生命周期相互独立:执行
mvn clean不会触发 Default 生命周期的任何阶段,反之亦然。 - 可以组合执行:如
mvn clean install会先执行 Clean 生命周期的clean阶段,再执行 Default 生命周期的install阶段。
# 插件
# 什么是插件?
插件是 Maven 执行特定任务的工具,它们扩展了 Maven 的功能。插件可以用于编译代码、运行测试、打包应用、部署构件、生成报告等。每个插件都有一个明确的职责,并且可以配置在 Maven 的 pom.xml 文件中。
# 插件的核心概念
# 1. 目标(Goal)
Maven 插件可以有一个或多个目标(Goal),每个目标是执行具体任务的命令。例如:
maven-compiler-plugin插件有compile和testCompile两个目标。maven-surefire-plugin插件有test目标。
插件目标可以独立执行:
mvn plugin:goal,如mvn compiler:compile。
# 2. 绑定(Binding)
Maven 将插件目标绑定到构建生命周期的特定阶段。当 Maven 执行到某个阶段时,会自动执行绑定的目标。
例如,maven-compiler-plugin 的 compile 目标默认绑定到 compile 阶段。
# 3. 配置(Configuration)
插件可以通过 <configuration> 标签进行配置,以指定插件的参数或行为。
# 4. 执行(Execution)
插件的执行(Execution)定义了在构建过程中何时以及如何执行插件目标。可以为同一个插件配置多个执行,以在不同的阶段执行相同或不同的目标。
# 5. 继承(Inheritance)
Maven 项目可以继承父项目的插件配置,这使得在多模块项目中管理插件变得更加容易。
# 常用 Maven 插件
| 插件 | 说明 |
|---|---|
maven-compiler-plugin | 编译 Java 源代码 |
maven-surefire-plugin | 运行单元测试 |
maven-jar-plugin | 创建 JAR 文件 |
maven-war-plugin | 创建 WAR 文件 |
maven-assembly-plugin | 创建自定义的分发包(如 zip、tar.gz) |
maven-deploy-plugin | 将构建的构件部署到远程仓库 |
maven-source-plugin | 打包源代码到 JAR 文件 |
maven-javadoc-plugin | 生成 Javadoc 文档 |
maven-site-plugin | 生成项目的网站和报告 |
maven-resources-plugin | 处理资源文件(如配置文件) |
maven-install-plugin | 将构件安装到本地仓库 |
maven-clean-plugin | 清理构建产生的文件 |
maven-enforcer-plugin | 执行项目规则检查(如 JDK 版本要求) |
maven-shade-plugin | 创建包含所有依赖的 uber-jar |
# 插件配置示例
# 配置编译插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 配置测试插件(跳过指定测试)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<skip>false</skip>
<excludes>
<exclude>**/integration/**</exclude>
</excludes>
<includes>
<include>**/unit/**Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 自定义执行(将源码打包绑定到 package 阶段)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 插件管理(pluginManagement)
与 <dependencyManagement> 类似,<pluginManagement> 用于在父 POM 中集中管理插件版本,子模块需要显式声明才会引入:
<!-- 父 POM -->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!-- 子 POM(只需声明,无需指定版本和配置) -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
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
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
# 学习参考
上次更新: 2026/7/24 16:59:26