这又是一个系列,一个要把Maven讲透的系列,希望能够对大家有帮助!

前言

在Maven中,核心概念一共有五个,包括前面已经总结完成的坐标、依赖和仓库,以及这里要讲的生命周期,还有将在下一篇要讲的插件。掌握了这五个核心概念,也就基本上把握了Maven的命脉。不夸张的说,把握了这五大核心概念,你可以自豪的说你在Maven的掌握上,超过了80%的人。而除了这五大概念,我总结的其它Maven系列的文章,无法就是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生命周期

在Maven中,有三套相互独立的生命周期,分别是cleandefaultsite

  • clean:clean生命周期的目的是清理项目;
  • default:default生命周期的目的是构建项目;
  • site:site生命周期的目的是建立项目站点。

每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。我们和Maven最直接的交互方式就是通过调用这些生命周期阶段。以clean生命周期为例,它包含的阶段有pre-cleancleanpost-clean。当我们调用pre-clean的时候,只有pre-clean阶段后执行;当我们调用clean的时候,pre-cleanclean阶段会按顺序执行;当我们调用post-clean的时候,pre-cleancleanpost-clean都会按顺序执行。

和生命周期阶段的前后依赖关系相比,cleandefaultsite这三套生命周期本身是相互独立的,我们可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其它生命周期产生任何影响。

Maven生命周期

常用命令详解

在《Maven基础教程之使用入门》这篇文章中,讲到了一些通过命令行来编译、测试和打包程序的命令,现在总结完了生命周期,再回过头去看这些命令,你将会有更深刻的认识。

  • mvn clean:调用实际插件完成clean生命周期的clean阶段的操作,实际调用的是pre-cleanclean两个阶段;
  • mvn test :调用default生命周期对应的阶段的插件,完成从validatetest阶段的所有操作;
  • mvn clean install:调用clean周期的clean阶段和defaultinstall阶段,实际调用的是pre-cleanclean以及validateinstall阶段;
  • mvn clean deploy site-deploy:调用完整的三个生命周期所有阶段(post-clean不被调用)。

总结

理论性的东西还是蛮多的,而这些知识点是我们后续用好Maven的基础,希望大家通过这里总结的内容,能对Maven中的生命周期这个重要概念有所理解。下一篇将重点总结插件,下一篇再见。

果冻想,玩代码,玩技术!

2019年4月14日,于内蒙古呼和浩特。


图片描述


果冻想
430 声望32 粉丝