《Maven实战》学习总结(五)——生命周期和插件

来源:互联网 发布:java方法中的作用 编辑:程序博客网 时间:2024/05/11 00:19

       前面的文章中,我们介绍了Maven世界中一些基础的概念:坐标、依赖、仓库等,本篇文章将介绍另外两个核心的概念——生命周期和插件。

       我们前文已经提到项目构建的定义,而在Maven出现之前,各个项目都有各自的构建过程,没有统一的标准,而正是Maven的生命周期总结了大量项目的构建经验,对所有的构建过程进行抽象和统一,提炼出一个能适应绝大部分项目的构建过程。

        Maven中定义的生命周期实际是一个抽象的概念,我们平时在命令行窗口输入的构建命令是对应这Maven中生命周期的一个“阶段”的,我们可以理解成Maven的生命周期是规定了项目的构建阶段,而实际的执行是通过插件完成的,两者是协同工作、密不可分的。这跟设计模式中的模板方法设计思想很接近。


生命周期

         Maven实际上是有三套生命周期,具体如下图所示

        

         clean生命周期主要是清理项目,包含三个阶段pre-clean、clean、post-clean三个阶段;

         default生命周期包含真正构建所需执行的步骤,是所有生命周期的核心,包含了compile、test、package、install、deploy等阶段。

         site生命周期是为了建立和发布项目站点,基于POM所包含信息,自动生成站点,可以方便团队交流和发布信息。

        三套生命周期之间相互独立,每套生命周期内部具有前后依赖关系(参看图中所示箭头方向)。我们在执行mvn clean install  这条命令的时候,Maven实际执行了clean生命周期的pre-clean、clean两个阶段、default生命周期的从其实的validate阶段开始一直到install阶段。


插件

       Maven核心只定义了生命周期这一抽象统一的项目构建相关的概念,这就仿佛只定义了接口,没有给出实现。而真正实现构建目标的是各种各样的插件来完成的。这也解释了Maven核心分发包只有2/3M的大小。

       为了复用代码,一个插件往往能实现很多功能,而与生命周期各个阶段绑定的实际上是插件目标(Plugin Goal),一个插件目标代表插件的一个功能。我们一般习惯于这样表示:compiler:compile(插件前缀:插件目标)


插件绑定

      Maven提供了生命周期阶段与插件目标的内置绑定,因此我们在零配置的基础上就能使用Maven构建我们的项目,这里需要注意的是由于项目打包方式不同,  default生命周期提供的内置绑定插件也会不同,我们可以通过观察构建项目时的打印输出得知具体执行的插件目标。同时,我们可以自定义将插件绑定到某个生命周期阶段上;也可以根据插件的使用范围,配置插件运行时的参数,可通过命令行、POM中针对插件的全局配置、POM中针对某个插件目标的配置


命令行执行插件目标

        另外,Maven也支持从命令行调用插件来完成插件目标的执行,比如这样的方式:mvn dependency:tree,其中dependency代表插件前缀,我们可以不明确指定插件的坐标,这样就比较简洁的使用Maven内部解析机制,以插件前缀为依据,从而找到对应的插件,完成插件目标的执行。当然,也可以输入命令明确指定插件坐标:

       mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:tree


小结

      本篇文章我们介绍了Maven生命周期的概念以及其中包含的过程,然后简单介绍了插件,及将插件目标绑定到生命周期过程的机制。可以说Maven生命周期与插件之间协调工作、互相补充,使我们领略到Maven高度完善、易扩展的特性。

1 0
原创粉丝点击