在Maven中,核心概念一共有五个,包括前面已经总结完成的坐标、依赖和仓库,以及这里要讲的生命周期,还有将在下一篇要讲的插件。掌握了这五个核心概念,也就基本上把握了Maven的命脉。不夸张的说,把握了这五大核心概念,你可以自豪的说你在Maven的掌握上,超过了80%的人。而除了这五大概念,我总结的其它Maven系列的文章,无法就是Maven的具体场景应用,大体上都离不开这五大核心概念。
废话不多说,开始总结今天的总结!
人生老病死,这是一个生命周期。在Maven中,也有一个生命周期的概念。不管是刚刚入门的开发菜鸟,还是做了多年开发的大佬,每天干的工作无非就是对自己负责的项目进行清理、编译、测试和部署。虽然大家每天都在做这些工作,但是公司和公司之间、项目与项目之间,往往使用不同的方式做这些工作。有的是手工来搞定这些,有的人可能会聪明一些,写一些自动化脚本来搞定这些。不管大家怎么搞,都是能满足自己当下的工作需要,很好的完成自己当下的工作。可能换了个公司,或者换了个项目,把自己之前写的脚本,改吧改吧,接着来。你改吧改吧,能用就好,无可厚非,但是的确很麻烦,搞不好改了半天,发现之前的脚本不好用,可能还要重写。是的,你的痛点问题,Maven也知道,Maven说了,它来帮你搞定这些问题。所以就提出了Maven生命周期的概念。
Maven生命周期就是为了对所有的构建过程进行抽象和统一,开发了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。换句话说,几乎所有项目的构建,都能映射到这样一个生命周期上。
Maven的生命周期是抽象的,也就是说生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务都交给插件来完成。这种思想与设计模式中的模板方法非常相似。对模板方法设计模式不清楚的伙计可以看 这里 。Maven采用这样的设计,既保证了Maven整体框架的轻便,也最大程度的扩展性。
Maven生命周期抽象了构建的各个步骤,明确了它们的逻辑次序,但没有提供具体的实现。Maven通过插件机制,这些插件来完成实际的工作,同时每个构建步骤都可以绑定一个或者多个插件行为。为了让Maven开箱即用,Maven为大多数构建步骤编写并绑定了默认插件。比如针对编译的插件有 maven-compiler-plugin
,针对测试的插件有 maven-surefire-plugin
等。虽然在大多数时间里,用户几乎都不会感觉到插件的存在,而Maven如此的强大,都是因为在幕后有功能强大的插件,这一切实际的工作都是由这些插件来完成的。
通过Maven定义的生命周期和插件机制保证了所有Maven项目有一致的构建标准,简化了项目的构建工作。
在Maven中,有三套相互独立的生命周期,分别是 clean
、 default
和 site
。
clean default site
每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。我们和Maven最直接的交互方式就是通过调用这些生命周期阶段。以 clean
生命周期为例,它包含的阶段有 pre-clean
、 clean
和 post-clean
。当我们调用 pre-clean
的时候,只有 pre-clean
阶段后执行;当我们调用 clean
的时候, pre-clean
和 clean
阶段会按顺序执行;当我们调用 post-clean
的时候, pre-clean
、 clean
和 post-clean
都会按顺序执行。
和生命周期阶段的前后依赖关系相比, clean
、 default
和 site
这三套生命周期本身是相互独立的,我们可以仅仅调用 clean
生命周期的某个阶段,或者仅仅调用 default
生命周期的某个阶段,而不会对其它生命周期产生任何影响。
在《 Maven基础教程之使用入门 》这篇文章中,讲到了一些通过命令行来编译、测试和打包程序的命令,现在总结完了生命周期,再回过头去看这些命令,你将会有更深刻的认识。
mvn clean
:调用实际插件完成 clean
生命周期的 clean
阶段的操作,实际调用的是 pre-clean
和 clean
两个阶段; mvn test
:调用 default
生命周期对应的阶段的插件,完成从 validate
到 test
阶段的所有操作; mvn clean install
:调用 clean
周期的 clean
阶段和 default
的 install
阶段,实际调用的是 pre-clean
、 clean
以及 validate
到 install
阶段; mvn clean deploy site-deploy
:调用完整的三个生命周期所有阶段( post-clean
不被调用)。 理论性的东西还是蛮多的,而这些知识点是我们后续用好Maven的基础,希望大家通过这里总结的内容,能对Maven中的生命周期这个重要概念有所理解。下一篇将重点总结插件,下一篇再见。
果冻想,认真玩技术的地方。
2019年4月14日,于内蒙古呼和浩特。