Maven 插件编写

转载请注明出处:http://thousandhu.github.io/2015/10/27/Maven-%E6%8F%92%E4%BB%B6%E7%BC%96%E5%86%99/
编写maven插件主要是两个部分,一个是使用这个插件的工程的pom.xml,另一个是插件本身。

首先看看工程的pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<build>
<plugins>
<plugin>
<groupId>my.maven</groupId>
<artifactId>my-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>process rdf</id>
<phase>generate-resources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<from>param1</from>
<to>param2</to>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

这里注意这样几个参数

  1. groupId:和具体程序的报名前缀要相同
  2. packaging: This should be set to “maven-plugin”
  3. dependencies:A dependency must be declared to the Maven Plugin Tools API to resolve “AbstractMojo” and related classes
  4. phase:就是在编译的那个阶段执行,可以参考Build Lifecycle
  5. goals: 这里的goal会在插件程序中作为注释,pom中提到的goal下的类中的execute会被执行
  6. configuration:这里主要是传入参数,比如程序中某个变量前有/*** @parameter expression="ttlFrom"*/的注释则会自动把值赋给这个变量。
    官网的这篇文档有更多的介绍

接下来java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* @goal hello
*/
public class SayHelloMojo extends AbstractMojo {
/**
* @parameter expression="ttlFrom"
*/
@Parameter( property = "hello.user", defaultValue = "admin" )
private String user;
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("
}
}

java文件中的@goal和pom.xml对应。maven编译时会执行这个注释标注的类的execute函数。

至于@parameter,我的程序中其实是没有的。String user的值直接和pom.xml的configuration通过变量名的方式对应。而且intellij中如果你在pom.xml中写没有定义名字的config,还会报错。。。

最后在java文件的命令行下执行mvn install。即可安装上mvn,这样用mvn编译时就会用到这个插件。

最后说一下版本吧,我的mvn是3.3.3,log里和mvn版本有关的信息有:

  • maven-jar-plugin:2.4
  • maven-plugin-plugin:3.2
  • maven-install-plugin:2.4

本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2015/10/27/Maven-插件编写/