maven的生命周期

2021年11月24日 阅读数:5
这篇文章主要向大家介绍maven的生命周期,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

Maven强大的一个重要的缘由,是它有一个十分完善的生命周期模型(Lifecycle)。html

Maven的生命周期模型能够从两个方面来理解apache

1.运行Maven的每一个步骤都是由生命周期来定义的,这种预约义的默认行为将Maven的使用变得简单。能够拿前辈Ant做为对比,由于Ant中的每一个步骤都须要手工去定义,使用起来就会复杂不少。服务器

2.生命周期模型是一种标准。在不一样的项目中,使用Maven的接口是同样的,这样就不用去仔细地理解每一个项目的构建了。由于通常状况下,mvn clean、mvn install这样的命令是通用的。这一点也贯彻了【约定优于配置】的理念。框架

Maven有【三套】【相互独立】的生命周期maven

Maven有三套独立的生命周期,不了解的话很容易将Maven的生命周期看做一个总体。ide

1.清理生命周期(Clean Lifecycle):在开始真正的项目构建以前进行一些清理工做。工具

2.默认生命周期(Default Lifecycle):构建项目的核心部分,包括编译、测试、打包、部署等。post

3.站点生命周期(Site Lifecycle):生成项目报告、站点,发布站点。单元测试

相互独立的意思就是说,你能够仅仅调用clean来清理工做目录,能够仅仅调用site来生成站点,这三个生命周期之间相互独立,并不存在强依赖关系。开发工具

固然了,也能够将三个生命周期组合使用,直接运行mvn clean install site来一块儿运行这三套生命周期。

清理生命周期(Clean Lifecycle)

每套生命周期都由一组阶段(Phase)来组成,咱们平时在控制台输入的命令老是会对应于一个特定的阶段,好比运行mvn clean,这里的clean就是清理生命周期的一个阶段。

清理生命周期一共包含了三个阶段:

1.pre-clean(预清理):执行一些须要在clean阶段以前完成的工做。

2.clean(清理):移除全部上一次构建生成的文件。

3.post-clean(后清理):执行一些须要在clean结算以后马上完成的工做。

mvn clean中的clean就是上面的clean。在一个生命周期中运行某个阶段的时候,它以前的全部阶段都会被运行,也就是说,mvn clean就至关于mvn pre-clean clean。若是咱们运行mvn post-clean,那么pre-clean和clean都会被运行。这是Maven的一个很重要的规则/特性,能够大大地简化命令的输入。

默认生命周期(Default Lifecycle)

默认生命周期是Maven最重要的一个生命周期,绝大部分工做都发生在这个生命周期中。

默认生命周期包含了如下的阶段(这里只列出经常使用和必要了解的,实际上还有不少):

process-resources:复制并处理资源文件,至目标目录,准备打包。

compile:编译项目的源代码。

process-test-resources:复制并处理资源文件,至目标测试目录。

test-compile:编译测试源代码。

test:使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。

package:接受编译好的代码,打包成可发布的格式,如 JAR 。

install:将包安装至本地仓库,以让其它项目依赖。

deploy:将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

其实默认生命周期中还提供了不少的阶段,可是由于实际上会常用到的也就只有complie、test、package、install和deploy五个阶段,这里也就不所有列出来了。想要了解全部的阶段的话,能够到Maven的官方网站中查阅:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

基本上,根据名称咱们就能猜出每一个阶段的用途。

站点生命周期(Site Lifecycle)

站点生命周期存在如下四个阶段:

1.pre-site(预站点):执行一些须要在生成站点文档以前的工做。

2.site(站点):生成项目的站点文档。

3.post-site(后站点):执行一些须要在生成站点文档以后完成的工做,而且为部署作准备。

4.site-deploy(站点部署):将生成的站点文档部署到特定的服务器上。

在这些阶段中,最经常使用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点。这是Maven提供的一个至关强大的功能之一,深得管理者喜好,由于文档和统计数据可以自动生成,而且很好看。

Maven生命周期的总结

Maven的生命周期的知识点比较简单,在使用上只要记住,在同一套生命周期中运行任何一个阶段的时候,它前面的全部阶段都会被执行就好了。这就是为何当咱们运行mvn install命令的时候,代码会被编译(compile)、测试(test)和打包(package)。

可是这一特性在不一样一套的生命周期中并不适用,好比很容易会认为清理生命周期是在默认生命周期以前的必经阶段。也就是说,会被认为若是执行默认生命周期中的阶段的话,清理生命周期中的全部阶段都会被执行。而这是不对的,不一样一套的生命周期之间是相互独立的,其中的阶段并不会相互影响。若是须要在打包以前先清理以前打包的内容,须要单独运行清理生命周期。固然了,通常也会建议这么作,不然可能出现一些打包的奇怪问题,好比有一些文件并无被更新的问题。

另外须要注意的是,这些对项目及进行编译、测试、打包、运行、部署等工做在Maven中都是抽象的定义,Maven自身是不会实际负责这些工做的,而是交由插件来实现。意思就是说,Maven命令的实际工做执行者是各类各样的插件,经过插件提供的命令与Maven提供的阶段相互绑定来完成相应的工做。所以Maven的插件机制是彻底依赖于Maven的生命周期的,要想运用好这些Maven命令插件,理解Maven的生命周期也就变得十分重要。

上面这张图是Idea开发工具中的Maven插件,只要理解了Maven的生命周期和其中的阶段,就能很好地使用这个插件了。

 

"你说世界上真正值得说的事很少,就像真正过不去的坎也不多同样。可是只要你愿意给我说,我都想听,无论值不值得;你过不去的坎,我也想陪你一块儿走,无论最终能不能走过。"