作者:悠悠做神仙
之前做了一款Maven插件,主要是用来扫描项目的代码调用链,并根据需求生成脑图,以及做一些关于项目信息的维护。因为是扫描代码工程,所以采取插件的方式是最合适的。
趁热,给大家分享一波关于Maven插件开发的内容。
本次分享主要分为两部分,首先是本篇的Maven基础篇,主要是基本概念、生命周期、插件目标、常用插件和命令等,虽然大家常用Maven插件,但是对于其中的一些原理,可能大家不是很清楚,同时这些基础,也是做Maven插件开发之前需要了解的。了解完基础后,我们便开始上手进行Maven插件的开发,另外一篇会手把手教大家开发一个简单的Maven插件。
基础篇分享内容的导航:
1、Maven基本概念
2、Maven生命周期
3、Maven生命周期与插件目标
4、Maven相关命令
5、Maven常用插件
1、Maven基本概念
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。---来自【百度百科】
官网
概念:
Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型(POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。
还记得以前,在没有Maven之前,用eclipse工具进行开发的时候,最痛苦的莫过于关于依赖包的处理,由于缺包、包版本不一致、包冲突等问题引起的,需要一系列导包操作,真是苦不堪言:kelian:,需要先下载依赖包,再手动导入,既没效率也容易引发其他问题。后来,Maven出来了,在配置好Maven的环境变量后,大家通过维护项目的pom.xml文件,就可以实现对于项目相关依赖的导入及导出操作,简单快捷!
2、Maven生命周期
关于Maven生命周期,主要是存在三个标准的周期:
clean
、
default
、
site
,分别用于清理项目、构建项目、生成项目站点,而在一个生命周期中通常又会包含若干个阶段(
phase
)。
以下是一张典型的Maven构建(
build
)生命周期的图:
为了完成一个default生命周期,这些阶段(包括未在上面罗列的阶段)会被按顺序执行。
所以,就像图中compile是一个阶段,test也是一个阶段,把这些阶段按照一定顺序组合起来,就是生命周期的概念。
执行顺序
Maven通过将插件的目标与阶段进行绑定,可能一个目标绑定多个阶段或者不绑定。
那么,没有绑定到阶段的目标,可以单独调用触发。这些目标的执行顺序取决于调用目标和构建阶段的顺序。
clean
和 pakage 是构建阶段,
dependency:copy-dependencies
是目标。
命令:
mvn clean dependency:copy-dependencies package
这里的
clean
阶段将会被首先执行,然后
dependency:copy-dependencies
目标会被执行,最终
package
阶段被执行。
如果在调用生命周期的时候,想看到每个阶段的情况,可以参考附件【打印default生命周期配置】、【打印clean生命周期配置】,加到pom文件,调用一下命令查看一下即可。
3、Maven生命周期与插件目标
不过,生命周期只是一个抽象概念,一个生命周期按照顺序分为很多阶段(
phase
),而每个阶段(
phase
)到底做什么,则是通过绑定不同的插件(
goal
)目标实现。
构建阶段( phase )由插件目标(
goal
)构成!
所以,真正在干活的其实是插件,调用插件不同的目标(
goal
)去实现不同的需求。
如图所示:
一个插件可以有很多的目标(
goal
),每个阶段通过绑定插件的不同(
goal
),来实现每个阶段(
phase
)要做的事情。
就拿打包来看,如图所示,我们可以看到对应的阶段所绑定的插件目标。
4、Maven相关命令
关于插件命令格式
阶段:
mvn 阶段名
例如:
mvn clean
,
mvn install
目标:
mvn 插件名:目标名
例如:
mvn dependency:tree
如图,idea截图的部分maven指令提示。
当然,有些插件是有默认
goal
,也就是说,
mvn 插件名
,会执行默认
goal
。
命令参数
-D 传入属性参数
-P 使用pom中指定的配置
-e 显示maven运行出错的信息
-o 离线执行命令,即不去远程仓库更新包
-X 显示maven允许的debug信息
-U 强制去远程参考更新snapshot包
5、Maven常用插件
Maven官方插件列表:
http
://
maven.apache.org/plugins/index.html
-
maven-compiler-plugin :编译插件
-
maven-jar-plugin :打成jar包插件
-
maven-source-plugin :打包源码插件
-
maven-resource-plugin : 处理项目的资源文件拷贝到输出目录
-
maven-dependency-plugin :处理项目的依赖文件
-
maven-antrun-plugin :可以在maven中运行ant任务
-
duplicates-finder-plugin :查找重复依赖
-
mail-maven-plugin :设置邮件发送
关于Maven的基础就分享到这里,想必大家对Maven又有了一些深入的了解,下面我们将进行实战,开发一款Maven插件!
【Java工具开发】Maven插件开发之实战篇(二)