maven的任何行为都是通过插件完成的,包括项目的清理、编译、测试及打包等操作都有其对应的插件。每个插件都有一个或多个目标(可以当作方法),用户可直接通过

命令行(将插件加到settings.xml文件中,可直接通过插件名称及目标执行)运行这些插件目标或将插件目标绑定到maven的生命周期(可使用默认,也可自定义)。

插件主要分布于apache、codehaus,还有googlecode、sourceforge和github,无法搜索到满足需求的插件时,可自行开发maven插件。

 一、maven插件开发流程

创建一个maven-plugin项目:本身也是maven项目,特殊packaging必须是maven-plugin

为插件编写目标:每一个插件都包含一个或多个目标(方法),maven称之为mojo,提供一个或多个继承子AbstractMojo的类

为目标(mojo)提供配置点:提供可配置的参数

编写代码实现目标行为:实现mojo的功能

处理错误及日志:当发生异常时,根据情况控制maven的运行状态,并将信息记录到日志中去

测试插件:编写自动化的测试代码测试行为。

 二、编写maven插件

1、引入maven-archetype-plugin插件,使用mvn archetype:generate创建maven工程

2、pom.xml文件中的packaging的值maven-plugin,且引入maven-plugin-api(插件开发必须的类)依赖。

3、创建一个mojo并实现其功能:

继承AbstractMojo;实现execute()方法;提供@goal。

每个插件目标类或Mojo,都必须继承子AbstractMojo并实现execute()方法,只有这样maven才能识别该插件并执行execute(0方法

中的行为。同时须在mojo上添加@goal标注(如@goal count表示一个目标为count的mojo),标注自己目标名称后,有了插件目标定义后,才能在项目中配置或命令行调用

 4、运行

mvn com.juvenxu.mvnbook:maven-loc-plugin:0.0.1-SANPSHOT:count

将插件的groupId引入到settings.xml文件中,运行命令如下:mvn loc:count 

三、maven插件测试

1、可以使用单元测试方式

2、将插件安装到本地仓库后,再找个项目测试该插件

3、使用maven-invoker-plugin插件测试插件进行测试,可用来在一组项目上执行maven,同时,支持BeanShell及Groovy等语言

该插件支持如下参数:

debug(boolean):构建时是否开启debug
settingsFile(File):测试使用的settings.xml文件,默认本机环境仓库
localRepositoryPath(File):测试使用本地仓库
preBuildHookScript(String):构建之前运行的脚本
postBuildHookScript(String):构建后运行的脚本
<postBuildHookScript>validate.groovy</postBuildHookScript>