maven 生命周期 --多模块组装下的生命周期

本文介绍了Maven的生命周期,分为clean、default(build)和site三个模块。clean用于清理,default用于构建,site用于站点生成。生命周期不是线性的,而是由这三个模块共同协调完成。例如,`clean`指令执行了`pre-clean`和`clean`阶段,`package`指令执行了所有前置阶段。在多模块项目中,根据构建顺序,不同模块的生命周期会被组装成新的执行路径,但不改变模块内原有的生命周期顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

maven 生命周期 --多模块组装下的生命周期

18.11.11 松江图书馆

maven的生命周期主要有三块

① clean lifecycle

② default (bluid) lifecycle

③ sit lifecycle


关于生命周期,我在学习servlet,session,cookies,request对象 等等… 都涉及到过。
但它们的生命周期一般都是一个线性的过程,比如“初始化-init配置-使用-destory等”; 再简单点,它们其实都是bean对象,对应着不同监听事件或者状态而创建对象,然后使用对象的方法,然后再到销毁对象。

但maven的生命周期由3个部分,也就是3个模块组成,咋一听,让我有些懵,生命周期不是线性的,而是由3个模块组成???~~~

我花了较长时间的消化,才在自己的认知障碍中得到救赎~~~。

3个模块,对应着3个功能和职责,每个模块中都有其执行对应功能的”线性“生命周期,而maven的生命周期,并不是由一个模块所组的,而是由3个功能模块共同协调组装来完成的。

因为是3个模块共同构成,maven的生命周期不像是完全线性的生命周期一样,是固定的一条线性关系,maven的生命周期是根据条件,由不同的模块组成的一个”不固定“的线性关系,但这里的”不固定“并不指每个模块中本来的生命周期顺序不固定,而是多模块构建时,调用模块功能前后顺序的不固定 (可能看博的人暂时也不能理解,这样的好处可能你需要在了解maven的一些指令后才能体会,可以查看 博文最后案例分析

有了这样的认识后,我才算是在坑里爬了出来,才能让我理解maven的一些指令操作和执行流程方面的知识。~~

关于这3个功能模块,每个模块的功能,我自己简单的概括一下,具体每个模块的功能,可以参照每个模块对应的生命周期的功能描述

模块模块功能描述
clean清除target目录下的编译信息,每次调用build模块是,一般也会调用clean模块
default(build)通俗理解,就是编译文件,然后打包
site有关文档相关

clean 模块 对应的生命周期

执行阶段描述说明
pre-clean在实际的项目清理之前执行所需的过程
clean删除前一个构建生成的所有文件
post-clean执行完成项目清理所需的过程


Default(build)模块 对应的生命周期

执行阶段描述说明
validate验证项目是正确的,所有必要的信息都是可用的。
initialize初始化构建状态,例如设置属性或创建目录。
generate-sources生成包含在编译中的任何源代码。
process-sources处理源代码,例如过滤任何值。
generate-resources生成包含在包中的资源。
process-resources将资源复制并处理到目标目录中,准备打包。
compile编译项目的源代码。
process-classes从编译后生成生成的文件,例如在Java类上执行字节码增强。
generate-test-sources生成包含在编译中的任何测试源代码。
process-test-sources处理测试源代码,例如过滤任何值。
generate-test-resources为测试创建资源。
process-test-resources将资源复制并处理到测试目标目录中。
test-compile将测试源代码编译到测试目标目录
process-test-classes从测试编译后post-process生成文件,例如在Java类上执行字节码增强。对于Maven 2.0.5和以上。
test使用合适的单元测试框架运行测试。这些测试不应该要求打包或部署代码。
prepare-package在实际包装前执行必要的准备工作。这通常会导致包的一个未打包的、经过处理的版本。(Maven 2.1及以上)
package使用已编译的代码,并将其打包成可部署格式,例如JAR。
pre-integration-test执行集成测试之前需要执行的操作。这可能涉及到设置所需的环境等问题。
integration-test在需要集成测试的环境中,处理并部署包。
post-integration-test执行集成测试后所需要的操作。这可能包括清理环境。
verify运行任何检查以验证包是否有效,并满足质量标准。
install将该包安装到本地存储库中,作为本地其他项目的依赖项。
deploy在集成或发布环境中完成,将最终包复制到远程存储库中,以便与其他开发人员和项目共享。


Site模块 对应的生命周期

执行阶段描述说明
pre-site在实际的项目站点生成之前执行过程
site生成项目的站点文档
post-site执行确定站点生成的过程,并为站点部署做好准备
site-deploy将生成的站点文档部署到指定的web服务器

对于maven构建的项目,想要实现compolie (编译) package(打包) clean 等功能,是需要借助这3块功能块里面的具体指令来实现的。而不同的指令表示操作着该模块下的对应的生命周期 (可能有点难理解,我们来看下面例子来体会)

maven 很多情况我们是借助IDE中的插件来执行,但其实maven也可以通过命令窗口来执行,下面的所以例子,都是在项目的目录下,打开dos窗口进行的命令操作:

for example 1:

mvn clean    

既然是dos命令来操作,clean 它在这里表示的是一个指令, 但看这个名称我会猜到应该是操作 clean模块的,而clean指令操作的正clean功能中的clean生命阶段。

有没有感觉恍然大雾~

但此时我要引出一个想法,我们知道, 就具体的生命周期来说,它肯定是一个“线性的过程”,比如,如果session对象,session对象的生命周期,大概是“创建-使用-销毁”,如果没有创建,应该是不能使用的。

对应的我们上面的这个指令操作,我们知道Clean模块的生命周期是“pre-clean--->clean---> post-clean” 我们如果直接调用clean阶段,其实也应该是不行的,没错,但当你直接调用clean时,系统其实是执行了 pre-clean 和 clean 俩个阶段

for example 2:

mvn package   

package 指令, 对应操作的是default模块中的 package阶段,同样,在执行package阶段时,此阶段前的所以动作也都会执行。

但因为每次打包,会涉及到对target目录下的文件编译等操作,而clean 模块的功能可以把target目录清空,所以,一般都会先执行 clean指令,然后再重新编译,打包

mvn clean package      

案例分析
你需要深刻理解上面的 example 1: example 2: ,然后你就会发现:

当你执行 mvn package,但系统会默认执行bulid模块中package阶段前的所以阶段;
这时,maven的生命周期为:(bukid模块中) validate阶段 …此处省略多个阶段…package阶段

但当你执行 mvn clean package 时, 会涉及到多模块组装生命周期,生命周期为 (clean模块)pre-(clean模块)clean…(bukid模块中) validate阶段 …此处省略多个阶段…(bukid模块中)package阶段

所以,多模块组装生命周期,并不会改变每个模块原本的生命周期顺序,但根据多模块组装条件,会产生不同的组装后的生命周期


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值