当前位置: 首页 > news >正文

制作一个简单 的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;@Overridepublic 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

http://www.lryc.cn/news/263506.html

相关文章:

  • 基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat
  • Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤
  • maven 项目导入异常问题
  • 在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程
  • 国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)
  • 串口通信(5)-C#串口通信数据接收不完整解决方案
  • 大数据分析岗是干什么的?
  • hadoop运行jar遇到的一个报错
  • 长短期记忆(LSTM)神经网络-多输入分类
  • 开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍
  • Android Studio问题解决:Gradle Download 下载超时 Connect reset
  • 【Python百宝箱】云上翱翔:Python编程者的AWS奇妙之旅
  • 抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法
  • 【设计模式--行为型--访问者模式】
  • [最后一个月征稿、ACM独立出版】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)
  • android —— PopupWindow
  • mysql部署 --(docker)
  • 基于多智能体系统一致性算法的电力系统分布式经济调度策略MATLAB程序
  • Android : SensorManager 传感器入门 简单应用
  • 《点云处理》 点云去噪
  • npm login报错:Public registration is not allowed
  • OpenHarmony 启动流程优化
  • 解决腾讯云CentOS 6硬盘空间不足问题:从快照到数据迁移
  • org.slf4j日志组件实现日志功能
  • 3D小球跑酷
  • PyQt6 QInputDialog输入对话框控件
  • ASP.NET Core MVC依赖注入理解(极简个人版)
  • 基于SpringBoot+Vue实现的企业级微服务多租户多系统架构
  • 美光将于 2025 年推出 1γ DRAM,并在日本生产HBM
  • 【Docker】以service形式离线安装卸载的docker、compose服务