java开发maven插件入门
前言
在项目中我们使用到了大量的官方的maven插件,如clean,compiler,今天我们自己开发一个插件来更好的理解插件的原理。
创建maven插件项目
官方插件命名的格式为 maven-xxx-plugin,非官方的插件命名为 xxx-maven-plugin
修改pom文件
<packaging>maven-plugin</packaging>
默认的打包类型为jar
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<!-- dependencies to Java 5 annotations -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
添加上述依赖
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.0</version>
</plugin>
</plugins>
</build>
添加插件依赖,默认的plugin插件版本为3.2,不支持注解
开发插件
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@Mojo(name = "first")
public class MyFirstMojo extends AbstractMojo {
@Parameter(name = "name", defaultValue = "lisi")
private String name;
@Parameter(name = "address", property = "address", defaultValue = "上海")
private String address;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("this is a test plugin," + name + " " + address);
}
}
定义一个类继承AbstractMojo ,使用注解Mojo修饰,表示这是一个Mojo,每个Mojo实现一个goal,一个插件就是由一系列Mojo构成的。
注解Parameter用来定义参数,property 表示可以从项目属性中取值。插件项目install之后,本地其他项目就可以使用了。
使用插件
<plugin>
<groupId>com.imooc</groupId>
<artifactId>maven-plugin-first</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<name>lisi2</name>
</configuration>
</plugin>
点击之后会输出
我们也可以绑定到指定的生命周期阶段执行
<plugin>
<groupId>com.imooc</groupId>
<artifactId>maven-plugin-first</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>first</goal>
</goals>
</execution>
</executions>
<configuration>
<name>lisi2</name>
</configuration>
</plugin>
</plugins>
在编译时自动执行