Maven生命周期
生命周期概述(三套生命周期)
Maven有三套生命周期,分别是clean、default和site。
- clean生命周期:它的主要职责是清理旧文件,就像打扫房间一样,把上一次构建过程中产生的旧文件清理掉,删除
target目录,避免这些旧文件干扰下一次构建。它通常在default生命周期之前执行。 - default生命周期:这是核心构建生命周期,负责从项目编译、测试到打包、部署等一系列核心工作。项目从代码到可运行程序的转变,主要靠它来推动。
- site生命周期:主要用于生成文档,比如项目的API文档、用户指南等,一般在项目部署后执行,方便其他开发者了解和使用项目。
主要阶段详解
- clean:执行
mvn clean命令,会删除target目录。target目录中存放着编译后的文件和打包文件等,删除它可以避免旧文件对新构建的干扰。执行命令后,你会看到target目录被删除。 - compile:这个阶段会将
src/main/java目录下的代码编译到target/classes目录。编译过程就像是把人类语言翻译成机器能懂的语言。如果编译失败,常见原因可能是代码存在语法错误,或者依赖缺失。比如,你引用了一个外部库,但没有在pom.xml中正确引入,就会导致编译失败。 - test:此阶段会执行
src/test/java下的单元测试,通常使用JUnit等测试框架。测试报告生成在target/surefire - reports目录下。如果测试失败,会给出详细的错误信息,帮助你定位问题所在。例如,某个方法的预期返回值和实际返回值不一致,就会在测试报告中体现出来。 - package:根据项目的打包类型,如jar包或war包,将编译后的代码和相关资源进行打包,生成归档文件存放在
target目录下。比如,对于一个Java项目,会生成一个包含所有类文件和资源文件的jar包,就像把所有的零件都装进一个盒子里,方便运输和使用。 - install:这个阶段会将打包好的文件安装到本地仓库,供其他项目引用。安装后,在本地仓库中可以找到对应的文件路径,其他项目如果依赖这个项目,就可以直接从本地仓库获取,大大提高了项目间的复用性。
注意:同一套生命周期中,每次运行后面的阶段时,前面的阶段都会运行。
运行方式
-
IDEA面板方式:在IDEA的右侧Maven面板中,可以清晰地看到各个生命周期阶段。例如,clean阶段就在“Lifecycle”下的“clean”处。只需双击对应的阶段,就可以执行该阶段。如果想查看执行命令,可以右键点击该阶段,选择“Show Maven Executions”,就像打开一个小窗口,看看后台到底在执行什么命令。

-
命令行方式:在项目的根目录下,通过执行
mvn [phase]的格式来运行生命周期阶段。比如要执行clean阶段,就在命令行输入mvn clean。一般来说,面板方式对于初学者更友好,可视化操作简单易懂;而命令行方式则更适合自动化脚本,比如在持续集成环境中,通过脚本执行Maven命令,实现项目的自动化构建。
mvn clean

Maven体系结构总结
POM的核心地位
项目对象模型POM(Project Object Model)是Maven的“控制中心”,它就像项目的大脑,包含了项目的各种重要信息,如项目的基本信息(名称、版本、作者等)、依赖关系以及构建配置等。通过一个简单的图示可以看到,POM与Maven的其他组件紧密相连,其他组件都围绕着POM来工作,根据POM中的配置进行依赖管理、构建项目等操作。
依赖管理模型
依赖管理模型通过坐标来定位依赖。当项目需要某个依赖时,Maven首先会在本地仓库中查找,如果本地仓库没有,就会去私服(如果配置了的话)查找,最后才会去中央仓库查找。这种查找顺序就像在自己家(本地仓库)找东西,找不到就去邻居家(私服),再找不到就去大超市(中央仓库)。同时,Maven还有缓存机制,对于已经下载过的依赖,不会重复下载,大大加速了构建过程。
生命周期与插件机制
每个生命周期阶段都是由对应的插件来执行具体操作的。例如,compile阶段是由maven - compiler - plugin插件来实现的。以下是插件配置的基本语法示例:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
在这个配置中,groupId指定了插件所属的组,artifactId是插件的名称,version是插件的版本号,<configuration>标签内可以对插件进行一些个性化配置,比如这里设置了编译的源版本和目标版本为17。值得注意的是,插件版本默认继承自Maven父POM,这样可以避免在每个项目中重复配置相同的插件版本,减少了工作量。
236

被折叠的 条评论
为什么被折叠?



