沉梦手记 沉梦手记
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

    • idea相关

    • 玩转Git

    • Maven相关

      • Maven简介
      • Maven常用命令
      • Maven依赖管理
      • Maven生命周期与插件
        • 生命周期
          • 三套生命周期
          • 1. Clean 生命周期
          • 2. Default 生命周期
          • 3. Site 生命周期
          • 生命周期的特点
        • 插件
          • 什么是插件?
          • 插件的核心概念
          • 1. 目标(Goal)
          • 2. 绑定(Binding)
          • 3. 配置(Configuration)
          • 4. 执行(Execution)
          • 5. 继承(Inheritance)
          • 常用 Maven 插件
          • 插件配置示例
          • 配置编译插件
          • 配置测试插件(跳过指定测试)
          • 自定义执行(将源码打包绑定到 package 阶段)
          • 插件管理(pluginManagement)
        • 学习参考
      • Maven项目管理工具
      • Maven配置文件详解
    • 前端工具

    • 测试工具

    • AI工具

  • 工具库篇

  • 开发技巧篇

  • 工具类系列

  • 随笔

  • 开发日常
  • 开发工具篇
  • Maven相关
沉梦听雨
2024-09-07
目录

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 将生成的站点文档部署到服务器

# 生命周期的特点

  1. 阶段按顺序执行:执行某个阶段时,该阶段之前的所有阶段都会依次执行。例如执行 mvn install,会依次执行 validate → compile → test → package → install。
  2. 三套生命周期相互独立:执行 mvn clean 不会触发 Default 生命周期的任何阶段,反之亦然。
  3. 可以组合执行:如 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

# 配置测试插件(跳过指定测试)

<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

# 自定义执行(将源码打包绑定到 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

# 插件管理(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

# 学习参考

  • Maven 生命周期简介 – Maven 官方文档 (opens new window)
  • Maven 插件开发指南 (opens new window)
上次更新: 2026/7/24 16:59:26
Maven依赖管理
Maven项目管理工具

← Maven依赖管理 Maven项目管理工具→

Theme by Vdoing | Copyright © 2023-2026 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式