制作一个简单 的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
相关推荐
hakesashou几秒前
python交互式命令时如何清除
java·前端·python
攒了一袋星辰1 分钟前
今日指数项目项目集成RabbitMQ与CaffienCatch
java·分布式·rabbitmq
wrx繁星点点7 分钟前
事务的四大特性(ACID)
java·开发语言·数据库
IT学长编程15 分钟前
计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·音乐系统·计算机毕业设计选题
IT学长编程32 分钟前
计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·毕业论文·协同过滤算法·计算机毕业设计选题·个性化音乐推荐系统
小小娥子37 分钟前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
几何心凉44 分钟前
已解决:org.springframework.web.HttpMediaTypeNotAcceptableException
java
华农第一蒟蒻1 小时前
Java中JWT(JSON Web Token)的运用
java·前端·spring boot·json·token
两点王爷1 小时前
使用WebClient 快速发起请求(不使用WebClientUtils工具类)
java·网络
计算机学姐1 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis