《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高度完善、易扩展的特性。
- 《Maven实战》学习总结(五)——生命周期和插件
- Maven实战——生命周期和插件
- Maven学习总结(16)——深入理解maven生命周期和插件
- Maven学习总结(16)——深入理解maven生命周期和插件
- Maven学习总结(12)——深入理解maven生命周期和插件
- Maven实战学习笔记(生命周期和插件)
- Maven的生命周期和插件(五)
- Maven实战学习笔记、7.生命周期和插件
- Maven学习笔记(五)——Maven生命周期
- Maven学习(四)-- 生命周期和插件
- Maven 实战 04 生命周期和插件
- 【Maven实战】07 生命周期和插件
- Maven实战之生命周期和插件
- maven学习--生命周期和插件
- Maven学习总结系列六:生命周期和插件
- 《maven实战》学习笔记2——maven安装(windows和eclipse插件)
- maven5—maven的生命周期和插件
- Maven学习笔记(十二)生命周期和插件
- malloc的一些
- 基于zookeeper管理redis集群,实现消息路由(一)
- Codeforce 189B——Counting Rhombi
- 《Maven实战》学习总结(四)——仓库
- Hadoop学习笔记(1)-Hadoop生态系统
- 《Maven实战》学习总结(五)——生命周期和插件
- 《Maven实战》学习总结(六)——多项目构建问题解决方案:聚合和继承
- Spring Bean生命周期
- 基本的阈值操作
- 占位
- CodeForces 16D Logging
- “链栈”判断表达式中的括号是否正确配对
- R
- 2016年3月之 壮怀激烈