Maven基础教程之生命周期

35次阅读

共计 2175 个字符,预计需要花费 6 分钟才能阅读完成。

这又是一个系列,一个要把 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 基础教程之使用入门》这篇文章中,讲到了一些通过命令行来编译、测试和打包程序的命令,现在总结完了生命周期,再回过头去看这些命令,你将会有更深刻的认识。

  • 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 日,于内蒙古呼和浩特。


正文完
 0