制作一个简单 的maven plugin

流程

首先, 你需要创建一个Maven项目,推荐用idea 创建项目 会自动配置插件

pom.xml文件中添加以下配置:

<project>  
    <!-- 项目的基本信息 -->  
    <groupId>com.example</groupId>  
    <artifactId>my-maven-plugin</artifactId>  
    <version>1.0.0</version>  
    <packaging>maven-plugin</packaging>  
  
    <!-- 项目的依赖  -->  
    <dependencies>  
        <dependency>  
            <groupId>org.apache.maven</groupId>  
            <artifactId>maven-plugin-api</artifactId>  
            <version>3.9.5</version>  
        </dependency>
        <dependency>
          <groupId>org.apache.maven.plugin-tools</groupId>
          <artifactId>maven-plugin-annotations</artifactId>
          <version>3.2</version>
          <scope>provided</scope>
        </dependency>
    </dependencies>
    <!-- 插件的配置 -->  
    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-plugin-plugin</artifactId>  
                <version>3.10.2</version>  
                <configuration>  
                    <!-- 插件的目标类 -->  
                    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
                </configuration>  
                <executions>  
                    <execution>  
                        <id>mojo-descriptor</id>  
                        <goals>  
                            <goal>descriptor</goal>  
                        </goals>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
    </build>  
</project>

老版本的依赖

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>  
  <artifactId>my-maven-plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>1.0.0</version>
  <name>untitled1 Maven Mojo</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- 老版本的依赖方式 -->
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.2</version>
      <scope>provided</scope>
    </dependency>
    <!-- 老版本的依赖方式 -->
    
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!-- 插件的配置 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <!-- 插件的目标类 -->
          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
        </configuration>
        <executions>
          <execution>
            <id>mojo-descriptor</id>
            <goals>
              <goal>descriptor</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

接下来,你需要创建一个实现了Mojo接口的Java类。Mojo是Maven Old Java Object的缩写,代表一个Maven插件的目标(goal)。在这个类中,你可以定义插件的具体行为。以下是一个简单的示例:

package com.example;  
  
import org.apache.maven.plugin.AbstractMojo;  
import org.apache.maven.plugin.MojoExecutionException;  
import org.apache.maven.plugins.annotations.LifecyclePhase;  
import org.apache.maven.plugins.annotations.Mojo;  
import org.apache.maven.plugins.annotations.Parameter;  
  
import java.util.List;  
  
@Mojo(name = "my-goal", defaultPhase = LifecyclePhase.PACKAGE)  
public class MyMojo extends AbstractMojo {  
    @Parameter(property = "message", defaultValue = "Hello, World!")  
    private String message;  
  
    @Parameter(property = "names")  
    private List<String> names;  
  
    @Override  
    public void execute() throws MojoExecutionException {  
        getLog().info(message);  
        for (String name : names) {  
            getLog().info("Name: " + name);  
        }  
    }  
}

在这个示例中,我们创建了一个名为MyMojo的类,并使用@Mojo注解来指定插件的目标名称为my-goal,以及默认的生命周期阶段为PACKAGE。我们还定义了两个参数:message和names,分别使用@Parameter注解进行配置。在execute()方法中,我们简单地打印了这些参数的值。现在,你可以构建并安装你的Maven插件。在命令行中,导航到项目的根目录,并执行以下命令:

mvn clean install

这将编译并打包你的插件,并将其安装到本地Maven仓库中。一旦安装完成,你就可以在其他Maven项目中使用你的插件了。以下是一个使用示例:在另一个Maven项目的pom.xml文件中,添加以下配置:

<project>  
    <!-- 项目的其他配置 -->  
    <build>  
        <plugins>  
            <plugin>  
                <groupId>com.example</groupId>  
                <artifactId>my-maven-plugin</artifactId>  
                <version>1.0.0</version>  
                <configuration>  
                    <message>Hello from my plugin!</message>  
                    <names>  
                        <name>Alice</name>  
                        <name>Bob</name>  
                        <name>Charlie</name>  
                    </names>  
                </configuration>  
                <executions>  
                    <execution>  
                        <goals>  
                            <goal>my-goal</goal> <!-- 指定插件的目标 -->  
                        </goals>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
    </build>  
</project>

ideal 运行配置这个插件

command line "com.example:my-maven-plugin:1.0.0:my-goal" 命令行太长,我们可以通过 增加 goalPrefix 属性来,修改命令前缀,具体做法如下:

修改原有的 MyMojo

@Mojo(name = "my-goal", defaultPhase = LifecyclePhase.PACKAGE)
public class MyMojo extends AbstractMojo {

    @Parameter(property = "goalPrefix", defaultValue = "my-prefix")
    private String goalPrefix;

    @Parameter(property = "message", defaultValue = "Hello, World!")
    private String message;

    @Parameter(property = "names")
    private List<String> names;

    @Override
    public void execute() throws MojoExecutionException {
        getLog().info(message);
        for (String name : names) {
            getLog().info("Name: " + name);
        }
    }
}

修改 my-maven-plugin 插件pom.xml文件,增加goalPrefix

<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/maven-v4_0_0.xsd">
 
   ...  
  <!-- 插件的配置 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.10.2</version>
        <configuration>
          <!-- 插件的目标类 -->
          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
          <goalPrefix>my-prefix</goalPrefix>
        </configuration>
        <executions>
          <execution>
            <id>mojo-descriptor</id>
            <goals>
              <goal>descriptor</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

重新打包,然后在引用项目中 ,通过ideal 修改如下运行配置:

my-prefix:my-goal

对应的maven 命令行

mvn my-prefix:my-goal
相关推荐
confiself8 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
Wlq041513 分钟前
J2EE平台
java·java-ee
XiaoLeisj20 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
豪宇刘35 分钟前
SpringBoot+Shiro权限管理
java·spring boot·spring
Elaine20239139 分钟前
02多线程基础知识
java·多线程
gorgor在码农41 分钟前
Redis 热key总结
java·redis·热key
百事老饼干1 小时前
Java[面试题]-真实面试
java·开发语言·面试
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
2402_857589361 小时前
SpringBoot框架:作业管理技术新解
java·spring boot·后端