当前位置: 首页 > 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

相关文章:

制作一个简单 的maven plugin

流程 首先&#xff0c; 你需要创建一个Maven项目&#xff0c;推荐用idea 创建项目 会自动配置插件 pom.xml文件中添加以下配置&#xff1a; <project> <!-- 项目的基本信息 --> <groupId>com.example</groupId> <artifactId>my-maven-plugi…...

基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat

Tomcat下载官网&#xff1a; Apache Tomcat - Which Version Do I Want? JDK下载官网&#xff1a; Java Downloads | Oracle 中国 如果不知道Tomcat的哪个版本应该对应哪个版本的JDK可以打开官网&#xff0c;点击Whitch Version 下滑&#xff0c;有低版本的&#xff0c;如…...

Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤

环境搭建 1.Boost安装 下载Boost源码 &#xff1a; https://www.boost.org/users/download/ 编译安装 首先安装编译所需依赖 sudo apt-get install build-essential g sudo apt-get install installpython-dev autotools-dev sudo apt-get install installlibicu-dev buil…...

maven 项目导入异常问题

问题如下 一、 tomcat正再运行的包是哪一个 不同构建、打包情况下分别运行 out\artifacts下 当直接去Project Structure下去构建artifacts 后&#xff0c;运行tomcat 则会在out下target下 reimport项目后,则会在artifacts自动生成部署包。删除tomcat之前deployment 下的包(同…...

在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程

在 VMware 虚拟机上安装黑苹果(Hackintosh)&#xff1a;免费 macOS ISO 镜像下载及安装教程 VMware 虚拟机解锁 macOS 安装选项使用 macOS iso 系统镜像安装使用 OpenCore 做引导程序安装 在 VMware 虚拟机上安装黑苹果(Hackintosh)&#xff1a;免费 macOS ISO 镜像下载及安装…...

国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)

ToolBench项目可以理解为一个能直接提供训练ToolLLM的平台&#xff0c;该平台同时构建了ToolLLM的一个开源训练指令集。&#xff0c;该项目是OpenBMB机构&#xff08;面壁智能与清华NLP联合成立&#xff09;旗下的一款产品&#xff0c;OpenBMB机构名下还同时拥有另外一款明星产…...

串口通信(5)-C#串口通信数据接收不完整解决方案

本文讲解C#串口通信数据接收不完整解决方案。 目录 一、概述 二、Modbus RTU介绍 三、解决思路 四、实例 一、概述 串口处理接收数据是串口程序编写的关键...

大数据分析岗是干什么的?

大数据分析岗主要负责从大规模数据集中提取、整理、分析和解释有关业务、市场或其他相关领域的信息的职位。 主要的职责和工作内容如下&#xff1a; 1. 数据收集和整理 收集各种数据源&#xff08;包括结构化、非结构化和半结构化数据&#xff09;&#xff0c;并将其整理成可…...

hadoop运行jar遇到的一个报错

报错信息&#xff1a; 2023-12-19 14:28:25,893 INFO mapreduce.Job: Job job_1702967272525_0001 failed with state FAILED due to: Application application_1702967272525_0001 failed 2 times due to AM Container for appattempt_1702967272525_0001_000002 exited with…...

长短期记忆(LSTM)神经网络-多输入分类

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…...

开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍

在当今数字创意领域&#xff0c;噪波贴图&#xff08;Noise Texture&#xff09;是游戏渲染、游戏开发、美术设计以及影视制作等行业不可或缺的艺术素材之一。为了满足广大创作者的需求&#xff0c;noisecreater.com应运而生&#xff0c;成为一款免费、开源的噪波贴图生成工具。…...

Android Studio问题解决:Gradle Download 下载超时 Connect reset

文章目录 一、遇到问题二、解决办法 一、遇到问题 Gradle Download下载超时Sync了很多次&#xff0c;一直失败 二、解决办法 手动通过gradle网站下载 https://gradle.org/releases/可能也会出现超时&#xff0c;最好开个VPN软件会比较快。 下载好的软件&#xff0c;放到本机的…...

【Python百宝箱】云上翱翔:Python编程者的AWS奇妙之旅

雲端箴言&#xff1a;用Python主持AWS管理交響樂 前言 随着云计算的普及&#xff0c;AWS&#xff08;Amazon Web Services&#xff09;成为了许多组织和开发者首选的云服务提供商。作为Python工程师&#xff0c;深入了解AWS管理工具和库对于高效利用云资源至关重要。本文将引…...

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法

在抖音直播间里&#xff0c;通过websocket收到的礼物消息数据格式如下&#xff1a; {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…...

【设计模式--行为型--访问者模式】

设计模式--行为型--访问者模式 访问者模式定义结构案例优缺点使用场景扩展分派动态分派静态分派双分派 访问者模式 定义 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 结构 抽象访问者角色&…...

[最后一个月征稿、ACM独立出版】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 一、大会简介 随着互联网和网络应用的不断发展&#xff0c;网络安全在计算机科学中的地…...

android —— PopupWindow

一、常用方法&#xff1a; 1、设置显示的位置 // 一个参数 popupWindow.showAsDropDown(v); //参数1: popupWindow关联的view // 参数2和3&#xff1a;相对于关联控件的偏移量popupWindow.showAsDropDown(View anchor, int xoff, int yoff)2、是否会获取焦点 popupWindow.se…...

mysql部署 --(docker)

先查找MySQL 镜像 Docker search mysql &#xff1b; 拉取mysql镜像&#xff0c;默认拉取最新的&#xff1b; 创建mysql容器&#xff0c;-p 代表端口映射&#xff0c;格式为 宿主机端口&#xff1a;容器运行端口 -e 代表添加环境变量&#xff0c;MYSQL_ROOT_PASSWORD是root用户…...

基于多智能体系统一致性算法的电力系统分布式经济调度策略MATLAB程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文献&#xff1a; 主要内容&#xff1a; 应用多智能体系统中的一致性算法&#xff0c;以发电机组的增量成本和柔性负荷的增量效益作为一致性变量&#xff0c;设计一种用于电力系统经济调度的算法&#x…...

Android : SensorManager 传感器入门 简单应用

功能介绍&#xff1a;转动手机 图片跟着旋转 界面&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/andr…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...