Maven 构建生命周期详解
一、核心概念
Maven 的生命周期被设计为一个明确定义的过程,用于构建和分发项目。它的核心抽象是生命周期(Lifecycle)、阶段(Phase) 和插件目标(Plugin Goal)。
-
生命周期 (Lifecycle):一个宏大的构建过程,包含多个阶段。Maven 有三个内置的生命周期:
clean:清理项目。default(或build):构建项目(核心)。site:生成项目站点文档。
-
阶段 (Phase):每个生命周期由一系列有序的阶段组成。阶段代表了生命周期中的一个步骤。
- 例如,
default生命周期包含:validate,compile,test,package,install,deploy等阶段。 - 关键规则:当您执行一个阶段时,Maven 会按顺序执行该生命周期中所有之前的阶段,最后执行您指定的阶段。执行
mvn install会先执行validate->compile->test->package,最后才是install。
- 例如,
-
插件与目标 (Plugin & Goal):
- 阶段本身是空的,它本身不做任何事。
- 实际的工作是由插件的目标(Goal) 来完成的。
- 一个插件目标是一个具体的任务(如
maven-compiler-plugin:compile)。 - 绑定(Binding):生命周期的阶段通过绑定机制与插件目标关联。例如,
compile阶段默认绑定了maven-compiler-plugin的compile目标。
二、三大生命周期详解
下面我们用 Mermaid 流程图来直观展示这三个生命周期及其核心阶段。
1. clean 生命周期
目的是清理项目,删除 target 目录。
pre-clean:执行一些清理前需要完成的工作。clean:核心阶段。绑定到maven-clean-plugin:clean目标,负责删除项目的target目录。post-clean:执行一些清理后需要完成的工作。
命令:mvn clean 会执行到 clean 阶段。
2. default (或 build) 生命周期
这是最核心、最常用的生命周期,用于项目的编译、测试、打包和部署。它包含非常多的阶段,下图展示了最重要的几个:
核心阶段解释:
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:jar或maven-war-plugin:war。verify:对集成测试的结果进行检查,以确保质量标准得到满足(常与maven-failsafe-plugin配合)。install:将打包好的安装到本地仓库中,以便本地其他项目可以依赖它。绑定到maven-install-plugin:install。deploy:在集成或发布环境中,将最终的包复制到远程仓库,以便其他开发人员或项目共享。绑定到maven-deploy-plugin:deploy。
命令示例:
mvn compile:执行到compile阶段。mvn package:执行从validate到package的所有阶段。mvn install:执行从validate到install的所有阶段。
3. site 生命周期
目的是为项目生成站点文档和报告。
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 生命周期的关键在于:
- 记住三大生命周期:
clean,default,site。 default生命周期的阶段是顺序执行的,执行后面的阶段会自动包含前面的。- 实际工作由插件目标完成,阶段通过绑定机制来调用这些目标。
这种设计提供了极大的灵活性和一致性,使得所有 Maven 项目都遵循相同的构建流程,极大地简化了构建过程。
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19120306

浙公网安备 33010602011771号