文章中如果有图看不到,可以点这里去 csdn 看看。从那边导过来的,文章太多,没法一篇篇修改好。

Maven 构建生命周期详解

一、核心概念

Maven 的生命周期被设计为一个明确定义的过程,用于构建和分发项目。它的核心抽象是生命周期(Lifecycle)阶段(Phase)插件目标(Plugin Goal)

  1. 生命周期 (Lifecycle):一个宏大的构建过程,包含多个阶段。Maven 有三个内置的生命周期:

    • clean:清理项目。
    • default (或 build):构建项目(核心)。
    • site:生成项目站点文档。
  2. 阶段 (Phase):每个生命周期由一系列有序的阶段组成。阶段代表了生命周期中的一个步骤

    • 例如,default 生命周期包含:validate, compile, test, package, install, deploy 等阶段。
    • 关键规则:当您执行一个阶段时,Maven 会按顺序执行该生命周期中所有之前的阶段,最后执行您指定的阶段。执行 mvn install 会先执行 validate -> compile -> test -> package,最后才是 install
  3. 插件与目标 (Plugin & Goal)

    • 阶段本身是空的,它本身不做任何事。
    • 实际的工作是由插件目标(Goal) 来完成的。
    • 一个插件目标是一个具体的任务(如 maven-compiler-plugin:compile)。
    • 绑定(Binding):生命周期的阶段通过绑定机制与插件目标关联。例如,compile 阶段默认绑定了 maven-compiler-plugincompile 目标。

二、三大生命周期详解

下面我们用 Mermaid 流程图来直观展示这三个生命周期及其核心阶段。

1. clean 生命周期

目的是清理项目,删除 target 目录。

clean 生命周期
pre-clean
clean
执行 clean:clean 目标
删除 target 目录
post-clean
结束
  • pre-clean:执行一些清理前需要完成的工作。
  • clean核心阶段。绑定到 maven-clean-plugin:clean 目标,负责删除项目的 target 目录。
  • post-clean:执行一些清理后需要完成的工作。

命令mvn clean 会执行到 clean 阶段。


2. default (或 build) 生命周期

这是最核心、最常用的生命周期,用于项目的编译、测试、打包和部署。它包含非常多的阶段,下图展示了最重要的几个:

default 生命周期
validate
检查项目信息
compile
编译主代码
test-compile
编译测试代码
test
运行单元测试
package
打包
install
安装到本地仓库
deploy
部署到远程仓库
结束

核心阶段解释

  • validate:验证项目是否正确,并且所有必要信息可用(例如,检查 POM 文件是否有效)。
  • compile编译项目的源代码(src/main/java),生成的文件放入 target/classes 目录。绑定到 maven-compiler-plugin:compile
  • test-compile:编译项目的测试代码(src/test/java),生成的文件放入 target/test-classes 目录。
  • test:使用合适的单元测试框架(如 JUnit)运行测试。绑定到 maven-surefire-plugin:test
  • package:将编译后的代码打包成可分发的格式,如 JAR、WAR。绑定到 maven-jar-plugin:jarmaven-war-plugin:war
  • verify:对集成测试的结果进行检查,以确保质量标准得到满足(常与 maven-failsafe-plugin 配合)。
  • install:将打包好的安装到本地仓库中,以便本地其他项目可以依赖它。绑定到 maven-install-plugin:install
  • deploy:在集成或发布环境中,将最终的包复制到远程仓库,以便其他开发人员或项目共享。绑定到 maven-deploy-plugin:deploy

命令示例

  • mvn compile:执行到 compile 阶段。
  • mvn package:执行从 validatepackage 的所有阶段。
  • mvn install:执行从 validateinstall 的所有阶段。

3. site 生命周期

目的是为项目生成站点文档和报告。

site 生命周期
pre-site
site
执行 site:site 目标
生成项目站点文档
post-site
site-deploy
部署生成的站点到服务器
结束
  • pre-site:执行一些在生成站点文档之前需要完成的工作。
  • site核心阶段。绑定到 maven-site-plugin:site 目标,生成项目站点文档(位于 target/site 目录)。
  • post-site:执行一些在生成站点文档之后需要完成的工作。
  • site-deploy:将生成的站点文档部署到配置的 Web 服务器。

命令mvn site 会执行到 site 阶段。


三、生命周期、阶段与插件的关系总结

在这里插入图片描述

  • 生命周期 (Lifecycle) 是一个抽象的、完整的构建过程。
  • 阶段 (Phase) 是生命周期中的具体步骤,但它只是一个“篮子”,本身是空的。
  • 插件目标 (Plugin Goal) 是实际干活的“工具”,如 compiler:compile
  • 绑定 (Binding):通过 POM 配置,将插件目标“放入”阶段这个篮子里。当生命周期执行到该阶段时,就会触发对应的插件目标来执行实际任务。

总结

理解 Maven 生命周期的关键在于:

  1. 记住三大生命周期:clean, default, site
  2. default 生命周期的阶段是顺序执行的,执行后面的阶段会自动包含前面的。
  3. 实际工作由插件目标完成,阶段通过绑定机制来调用这些目标。

这种设计提供了极大的灵活性和一致性,使得所有 Maven 项目都遵循相同的构建流程,极大地简化了构建过程。

posted @ 2025-09-19 09:59  NeoLshu  阅读(4)  评论(0)    收藏  举报  来源