1. 目标
更好的理解插件的目标和生命周期环节之间的关系
2. 插件开发
-
创建一个project,名称为maven-hello-plugin
-
修改pom.xml,添加packaging和dependency,最终内容如下:
<?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>com.hh.maven</groupId>
<artifactId>maven-hello-plugin</artifactId>
<version>1.0</version>
<!-- 设定打包方式 -->
<packaging>maven-plugin</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!-- 使用注释将goal目标绑定到MOJO类 -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.8.6</version>
</dependency>
</dependencies>
</project>
- 创建Mojo类
Mojo(Maven Old Java Object)类是一个Maven插件的核心类。每一个Mojo类都需要实现org.apache.maven.plugin.Mojo接口,org.apache.maven.plugin.AbstractMojo抽象类继承Mojo接口
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;
// 方式一:使用的是maven-plugin-api,通过注释的方式将goal目标,绑定到MOJO类
/**
* @goal sayHelloApi
*/
// 方式二:使用的是maven-plugin-annotations,通过注解的方式将goal目标,绑定到MOJO类
@Mojo(name = "sayHelloAnnotations")
public class MavenHelloPlugin extends AbstractMojo {
// 覆盖execute()方法
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("=======this is my first maven plugin=======");
}
}
-
执行
mvn clean install
将插件安装到本地的maven仓库 -
将插件注册到settings.xml中
将插件的pom中的groupId添加到settings.xml的pluginGroups.pluginGroup。如下所示
<pluginGroups>
<pluginGroup>com.hh</pluginGroup>
</pluginGroups>
3. 插件的使用
3.1 插件的匹配规则
Maven根据插件的artifactId来进行插件的匹配,有如下两种匹配规则:
-
前置匹配:
匹配规则:${prefix}-maven-plugin
artifactId:hello-maven-plugin
匹配到插件:hello -
中间匹配
匹配规则:maven-${prefix}-plugin
artifactId:maven-hello-plugin
匹配到插件:hello
3.2 命令行直接使用
C:\Users\dell\Desktop\maven-hello-plugin>mvn hello:sayHelloApi
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.hh:maven-hello-plugin >----------------------
[INFO] Building maven-hello-plugin 1.0
[INFO] ----------------------------[ maven-plugin ]----------------------------
[INFO]
[INFO] --- maven-hello-plugin:1.0:sayHelloApi (default-cli) @ maven-hello-plugin ---
[INFO] =======this is my first maven plugin=======
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.553 s
[INFO] Finished at: 2022-06-30T18:25:25+08:00
[INFO] ------------------------------------------------------------------------
C:\Users\dell\Desktop\maven-hello-plugin>
3.3 配置到build标签
<build>
<plugins>
<plugin>
<groupId>com.hh</groupId>
<artifactId>maven-hello-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>sayHelloApiId</id>
<phase>clean</phase>
<goals>
<goal>sayHelloApi</goal>
</goals>
</execution>
<execution>
<id>sayHelloAnnotationsId</id>
<phase>clean</phase>
<goals>
<goal>sayHelloAnnotations</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
重新导入依赖,效果如下:
双击其中任何一个都会执行,打印:
=======this is my first maven plugin=======
命令行执行mvn clean
,也会自动执行maven-hello-plugin插件的goal目标方法。效果如下:
C:\Users\dell\Desktop\maven-hello-plugin>mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.hh:maven-hello-plugin >----------------------
[INFO] Building maven-hello-plugin 1.0
[INFO] ----------------------------[ maven-plugin ]----------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-hello-plugin ---
[INFO] Deleting C:\Users\dell\Desktop\maven-hello-plugin\target
[INFO]
[INFO] --- maven-hello-plugin:1.0:sayHelloApi (sayHelloApiId) @ maven-hello-plugin ---
[INFO] =======this is my first maven plugin=======
[INFO]
[INFO] --- maven-hello-plugin:1.0:sayHelloAnnotations (sayHelloAnnotationsId) @ maven-hello-plugin ---
[INFO] =======this is my first maven plugin=======
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.419 s
[INFO] Finished at: 2022-06-30T18:35:18+08:00
[INFO] ------------------------------------------------------------------------
C:\Users\dell\Desktop\maven-hello-plugin>