一、Mojo
Mojo: Maven plain Old Java Object,实际上是一个maven的目标,插件包含任意数量的目标(Mojos)。
按照官方建议,maven插件的命名建议为xxxx-maven-plugin
自定义插件maven执行命令为mvn groupId:artifactId:goal,使用推荐命名方式,maven命令可以简化为mvn xxxx:goal
二、创建插件
1.pom文件
指定打包类型为maven-plugin
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example.tools</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
</project>
2.mojo实现类
@Mojo注解指定目标名称,@Parameter注解指定Mojo输入
@Mojo(name = "hello-goal")
public class MyMojo extends AbstractMojo {
@Parameter(property = "param")
private String param;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().warn("Hello Mojo...");
getLog().warn("param: " + param);
}
}
3.生成插件
使用mvn clean install生成插件,安装到本地仓库
三、运行插件
1.pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>maven-haha</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.example.tools</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<param>This is par</param>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.执行命令
mvn org.example.tools:hello-maven-plugin:1.0-SNAPSHOT:hello-goal
mvn hello:hello-goal
四、绑定 maven 执行周期
1.pom文件
将插件配置为将特定目标,从而附加到构建生命周期中的某个特定阶段
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>maven-haha</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.example.tools</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<param>This is par</param>
</configuration>
<executions>
<execution>
<id>hello-id</id>
<phase>clean</phase>
<goals>
<goal>hello-goal</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2.执行命令
执行mvn clean时,会运行hello-maven-plugin插件