Maven 构建生命周期与阶段详解

1. Maven 构建生命周期概述

Maven 是一个强大的构建工具,它的核心功能之一是提供了一套标准化的构建生命周期(Build Lifecycle),帮助开发者自动化项目的构建、测试、打包和部署。

Maven 的生命周期包含一系列的阶段(Phase),每个阶段对应不同的构建任务。例如,编译、测试、打包、部署等。开发者只需执行其中某个阶段,Maven 就会自动执行该阶段之前的所有阶段。

Maven 的三大生命周期

Maven 提供了三种主要的构建生命周期:

  1. Clean Lifecycle(清理生命周期):用于清理项目的编译输出文件。
  2. Default Lifecycle(默认生命周期):用于构建、测试、打包和部署项目。
  3. Site Lifecycle(站点生命周期):用于生成和发布项目的文档。

2. Maven 的 Default Lifecycle(默认构建生命周期)

默认生命周期(Default Lifecycle)是 Maven 的核心构建流程,负责完成从代码编译到项目打包的全过程。它由多个构建阶段(Phase)组成。

2.1 Default Lifecycle 的核心阶段

阶段(Phase) 描述
validate 验证项目结构、POM 配置是否正确,确保所有必要的信息都已定义。
initialize 初始化构建状态,如创建 target/ 目录,设置属性等。
generate-sources 生成源代码(如从代码生成器生成 Java 文件)。
process-sources 处理源代码(如代码格式化、预处理等)。
generate-resources 生成资源文件,如 XML 配置文件等。
process-resources 复制和过滤 src/main/resources 目录下的资源文件到 target/classes。
compile 编译 src/main/java 目录下的 Java 代码。
process-classes 处理编译后的 Java 类,如 AOP 增强、字节码修改等。
generate-test-sources 生成测试源代码。
process-test-sources 处理测试源代码,如代码格式化等。
generate-test-resources 生成测试资源文件,如测试配置文件等。
process-test-resources 复制和过滤 src/test/resources 目录下的资源文件到 target/test-classes。
test-compile 编译 src/test/java 目录下的测试代码。
process-test-classes 处理测试类,如字节码增强等。
test 运行单元测试,使用 JUnit 或 TestNG 进行测试。
prepare-package 准备打包操作,如生成额外的文件等。
package 打包编译后的代码和资源,如生成 JAR、WAR、EAR 文件。
pre-integration-test 在集成测试之前执行的操作,例如启动服务器或准备环境。
integration-test 运行集成测试,测试项目是否能在目标环境中正常运行。
post-integration-test 关闭集成测试环境,执行清理操作。
verify 检查项目是否满足质量标准,如代码覆盖率等。
install 将打包好的 JAR/WAR 包安装到本地 Maven 仓库,供其他项目使用。
deploy 将打包的项目部署到远程 Maven 仓库,如 Nexus 或 Artifactory。

2.2 Maven 默认生命周期示例

假设你有一个标准的 Maven 项目,并执行以下命令:

bash 复制代码
mvn package

Maven 会自动执行以下阶段:

  1. validate → 2. compile → 3. test → 4. package

即:

  • 验证 POM 文件
  • 编译源代码
  • 运行单元测试
  • 打包项目(如 JAR 文件)

如果你执行:

bash 复制代码
mvn install

Maven 会执行:

  1. validate → 2. compile → 3. test → 4. package → 5. install

即:

  • 打包完成后,会将 JAR/WAR 安装到本地仓库,供其他项目使用。

3. Maven 的 Clean Lifecycle(清理生命周期)

清理生命周期(Clean Lifecycle)用于删除构建过程中生成的文件,通常是 target/ 目录。

Clean 生命周期的三个阶段

阶段(Phase) 描述
pre-clean 运行清理前的任务
clean 删除 target/ 目录(编译输出)
post-clean 运行清理后的任务

执行示例

bash 复制代码
mvn clean

执行 mvn clean 后,Maven 会删除 target/ 目录,清除编译生成的文件,使得项目恢复到最初状态。


4. Maven 的 Site Lifecycle(站点生命周期)

站点生命周期(Site Lifecycle)用于生成和发布项目的文档。

Site 生命周期的核心阶段

阶段(Phase) 描述
pre-site 运行站点生成前的任务
site 生成 HTML 格式的项目文档
post-site 运行站点生成后的任务
site-deploy 部署生成的站点到服务器

执行示例

bash 复制代码
mvn site

这将会生成项目的 HTML 文档,包含:

  • 项目描述
  • 依赖关系
  • 插件信息
  • 构建状态等

文档默认存放在 target/site/index.html,可以用浏览器打开查看。


5. Maven 构建生命周期的使用示例

5.1 运行特定阶段

你可以执行特定的 Maven 构建阶段,例如:

bash 复制代码
mvn compile

Maven 会编译 Java 代码,但不会运行测试或打包。

bash 复制代码
mvn test

Maven 会编译代码并运行测试。

bash 复制代码
mvn package

Maven 会编译代码、运行测试并打包项目。

bash 复制代码
mvn install

Maven 会将打包后的 JAR/WAR 安装到本地 Maven 仓库。

bash 复制代码
mvn deploy

Maven 会将构建产物上传到远程仓库,如 Nexus。

5.2 组合执行多个生命周期

bash 复制代码
mvn clean package

先清理 target/ 目录,再进行编译、测试和打包。

bash 复制代码
mvn clean install

清理 target/,然后编译、测试、打包,并安装到本地仓库。


6. 总结

  • Maven 提供了三大生命周期:

    1. Clean Lifecycle :清理构建目录,如 target/。
    2. Default Lifecycle:执行完整的构建流程,包括编译、测试、打包、安装和部署。
    3. Site Lifecycle:生成项目的 HTML 文档。
  • 默认生命周期(Default Lifecycle)是最常用的 ,它包括 compile、test、package、install 和 deploy 等核心阶段。

  • 执行某个阶段时,Maven 会自动执行该阶段之前的所有阶段 ,例如 mvn package 会先编译和测试代码,再执行打包。

通过理解 Maven 的构建生命周期,开发者可以更高效地管理项目的编译、测试和部署流程,实现自动化构建,提高团队协作效率!🚀

相关推荐
Joy T3 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383006 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·7 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停8 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金9 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck10 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
Wang's Blog11 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog11 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网11 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff12 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈