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)是最常用的 ,它包括 compiletestpackageinstalldeploy 等核心阶段。

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

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

相关推荐
夕珩15 分钟前
Lambda 表达式
java·开发语言·jvm·windows
m0_7482561416 分钟前
Spring boot整合quartz方法
java·前端·spring boot
憶巷19 分钟前
Spring 事务管理
java·spring
m0_748240911 小时前
开源模型应用落地-CodeQwen模型小试-SQL专家测试(二)
java
Java中文社群1 小时前
1分钟学会DeepSeek本地部署,小白也能搞定!
java·后端·程序员
C_V_Better2 小时前
SpringCloud Gateway 动态路由配置全解
java·开发语言·spring cloud·gateway
CodeClimb2 小时前
【华为OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
烛.照1032 小时前
使用java代码操作rabbitMQ收发消息
java·linux·rabbitmq
m0_748238632 小时前
15.<Spring Boot 日志>
java·spring boot·后端