当前位置: 首页 > article >正文

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 项目,并执行以下命令:

mvn package

Maven 会自动执行以下阶段:

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

即:

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

如果你执行:

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运行清理后的任务

执行示例

mvn clean

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


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

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

Site 生命周期的核心阶段

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

执行示例

mvn site

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

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

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


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

5.1 运行特定阶段

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

mvn compile

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

mvn test

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

mvn package

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

mvn install

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

mvn deploy

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

5.2 组合执行多个生命周期

mvn clean package

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

mvn clean install

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


6. 总结

  • Maven 提供了三大生命周期

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

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

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


http://www.kler.cn/a/535944.html

相关文章:

  • 当今前沿技术:改变未来的核心力量
  • mongodb 使用内存过大分析
  • 【Prometheus】如何通过golang生成prometheus格式数据
  • 蓝桥杯之c++入门(六)【string(practice)】
  • c++ list的front和pop_front的概念和使用案例—第2版
  • Django框架丨从零开始的Django入门学习
  • Redis存储⑤Redis五大数据类型之 List 和 Set。
  • Java面试场景题分享
  • stm32生成hex文件详解
  • 如何在 Kivy 中从按钮更新选项卡内容
  • 【重生之学习C语言----水仙花篇】
  • PostgreSQL:数据库迁移与版本控制
  • 【Unity3D小功能】Unity3D中实现超炫按钮悬停效果
  • Golang 并发机制-6:掌握优雅的错误处理艺术
  • SQL中Limit的用法详解
  • DeePseek结合PS!批量处理图片的方法教程
  • 【react】react面试题
  • JavaWeb开发学习笔记--MySQL
  • JavaScript的 switch 方法
  • 通过STM32实现外设控制应用案例
  • Postman简介
  • 【机器学习案列】糖尿病风险可视化及预测
  • Spring Boot中使用MockMvc测试PATCH请求控制器
  • ubuntu下迁移docker文件夹
  • 深入解析:Jsoup 库的多功能应用场景
  • Python分享20个Excel自动化脚本