编写maven插件
步骤
使用archetype创建一个Maven插件项目
mvn archetype:generate -DarchetypeCatalog=internal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sunyi1</groupId>
<artifactId>maven-loc-plugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>maven-loc-plugin Maven Plugin</name>
<!-- FIXME change it to the project's website -->
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.0</version>
</dependency>
</dependencies>
</project>注意点:
- packaging必须为maven-plugin
- 依赖maven-plugin-api,开发插件需要包
创建CountMojo类:继承AbstractMojo,实现execute()方法,提供@goal标注
- 使用@parameter设置可配置参数
标注
- @goal
:唯一必须声明的标注,当用户命令行调用或在pom中配置插件是,需使用该目标名称 - @phase
:默认将该目标绑定至default声明周期的某个阶段,这样在配置使用插件目标时,就无需声明phase,如maven-surefire-plugin的test目标带有@phase tes标注 - @requiresDependencyResolution
:在运行mojo之前必须解析所有指定范围的依赖,如maven-surefire-plugin的test目标带有requiresDependencyResolution test标注,表示执行测试前,所有测试范围的依赖必须得到解析 - @requiresProject <true/false>:该目标是否必须在一个maven项目中运行(如测试插件用于测试其他项目),默认为true。大部分插件目标需依赖一个项目才能运行,但是,maven-help-plugin的system目标例外,它用来显示系统属性和环境变量信息,无需实际项目。
- @requiresOnline <true/false>:是否要求maven必须是在线状态,默认值为false
- @requiresReport <true/false>:是否要求项目报告已经生成,默认为false
- @aggregator :当mojo在多模块项目上运行时,该标注表示目标只会在顶层模块运行。
- @requiresDirectInvocation <true/false>:为true时,该目标就只能通过命令行直接调用。默认为false
- @execute goal=”
“:在运行该目标之前,让maven运行另外一个目标。如果是本插件目标,则直接调用目标名称,否则,使用“prefix:goal” - @execute phase=”
“:在运行该目标前,让maven先运行一个并行的生命周期,到指定的阶段为止。到phase执行完,才执行插件目标 - @execute lifecycle=”
“ phase = “ “:在运行该目标前,让maven先运行一个自定义的生命周期,到指定的阶段为止。
错误处理和日志
- 提供MojoExecutionException 和 MojoFailureException 两类异常
- 提供getLog()方法,获得Log对象,支持四种级别的日志:debug,info,warn,requiresReport
插件测试
使用maven-invoker-plugin进行测试