广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用maven自定义插件开发
  • 361
分享到

使用maven自定义插件开发

2024-04-02 19:04:59 361人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Maven 插件的命名规范什么是 Mojo?创建 Mojo 工程Maven 插件的命名规范什么是 Mojo?创建 Mojo 工程简单 Mojo 的创建运行自定义 Plugin缩短

Maven 作为一个优秀的项目管理工具,其插件机制为其功能扩展提供了非常大的便捷性。

虽然说大多数情况下,我们可能不太会自己去编写 Maven 插件,但不排除在某些特殊的情况下,我们需要去完成一个自己的插件,来协助我们处理某些比较通用的事情。

正好,最近有一些需求可能需要对 Drools 的一个 Maven 插件进行扩展,所以学习一下 Maven 的插件编写。

Maven 插件的命名规范

一般来说,我们会将自己的插件命名为 -maven-plugin,而不推荐使用 maven--plugin,因为后者是 Maven 团队维护官方插件的保留命名方式,使用这个命名方式会侵犯 Apache Maven 商标。

什么是 Mojo?

Mojo 就是 Maven plain Old Java Object。每一个 Mojo 就是 Maven 中的一个执行目标(executable Goal),而插件则是对单个或多个相关的 Mojo 做统一分发。一个 Mojo 包含一个简单的 Java 类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。

创建 Mojo 工程

这里,我们使用 idea 作为开发工具进行讲解,创建工程选择 Maven,然后在模板中找到 maven-archetype-mojo,点击下一步,输入对应的参数,如:com.qchery/ekjar-maven-plugin/1.0-SNAPSHOT,最后点击完成即可创建一个简单的 Mojo 工程。

Maven 插件的命名规范

一般来说,我们会将自己的插件命名为 -maven-plugin,而不推荐使用 maven--plugin,因为后者是 Maven 团队维护官方插件的保留命名方式,使用这个命名方式会侵犯 Apache Maven 商标。

什么是 Mojo?

Mojo 就是 Maven plain Old Java Object。每一个 Mojo 就是 Maven 中的一个执行目标(executable goal),而插件则是对单个或多个相关的 Mojo 做统一分发。一个 Mojo 包含一个简单的 Java 类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。

创建 Mojo 工程

这里,我们使用 Idea 作为开发工具进行讲解,创建工程选择 Maven,然后在模板中找到 maven-archetype-mojo,点击下一步,输入对应的参数,如:com.qchery/ekjar-maven-plugin/1.0-SNAPSHOT,最后点击完成即可创建一个简单的 Mojo 工程。

创建完成后,工程内会生成对应的 pom.xml 文件。其内容比较简单,与普通 Maven 工程的 pom.xml 基本一致,只是自动添加了对 maven-plugin-api 的依赖,这个依赖里面会包含一些 Mojo 的接口与抽象类,在后续编写具体的 Mojo 时再进行详细讲解。

<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>2.0</version>
</dependency>

与普通 pom.xml 文件一个重要的不同之处是它的打包方式:

<packaging>maven-plugin</packaging>

简单 Mojo 的创建

工程创建完毕后,我们开始 Mojo 创建之旅,上面提到过 Mojo 是一个简单的 Java 类,那我们创建第一个 Mojo 类用于打印一行输出。

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;

public class HelloMojo extends AbstractMojo {
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("hello world");
    }
}

观察一下这个类,我们发现它继承了 AbstractMojo 这个抽象类,并实现了 execute() 方法,该方法就是用来定义这个 Mojo 具体操作内容,我们只需要根据自己的需要来编写自己的实现即可。

Mojo 操作的实现我们了解了,那怎么让 Maven 知道这是一个 Mojo 而不是一个普通的 Java 类呢?这里,就需要说一下 Mojo 的查找机制了,在处理源码的时候,plugin-tools 会把使用了 @Mojo 注解或 Javadoc 里包含 @goal 注释的类来当作一个 Mojo 类。在上面的例子中,我们使用了 Javadoc 的方法来声明一个 Mojo。同样我们也可以使用 @Mojo 注解来进行声明:

@Mojo(name = "hello")
public class HelloMojo extends AbstractMojo {
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("hello world");
    }
}

使用 @Mojo 注解,我们需要引入一个新包:

<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.1</version>
</dependency>

运行自定义 Plugin

与使用其它插件类似,我们需要在 pom.xml 文件中引入插件:

<build>
    <plugins>
        <plugin>
            <groupId>com.qchery</groupId>
            <artifactId>ekjar-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
        </plugin>
    </plugins>
</build>

先执行命令:

mvn install

然后执行:

mvn com.qchery:ekjar-maven-plugin:1.0-SNAPSHOT:hello

即可看到输出:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building ekjar-maven-plugin Maven Mojo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- ekjar-maven-plugin:1.0-SNAPSHOT:hello (default-cli) @ ekjar-maven-plugin ---
hello world
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.249 s
[INFO] Finished at: 2017-03-26T12:59:47+08:00
[INFO] Final Memory: 6M/123M
[INFO] ------------------------------------------------------------------------

缩短执行命令

在刚才运行插件的时候,我们使用全量的插件指引,但这个实在是太长太繁琐了,那我们是否可以缩短我们的执行命令呢?

答案肯定是可以的,如果你想要执行的是你本地库中最新版本的插件,那么你可以删除掉版本号;如果你的命名满足前面提及的两种命令方式,你可以直接使用插件名及 goal 名来运行对应的插件,如:

mvn ekjar:hello

你会得到与之前完全一样的结果。

绑定 Maven 执行周期

你还可以将插件配置为将特定目标,从而附加到构建生命周期中的某个特定阶段。如:

<build>
    <plugins>
        <plugin>
            <groupId>com.qchery</groupId>
            <artifactId>ekjar-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <goals>
                        <goal>hello</goal>
                    </goals>
                    <phase>package</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

继承AbstractMojo 的类中,参数可以通过命令赋值,例如:


public class MyMojo extends AbstractMojo {
    
    private String message;
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("hello world");
        getLog().info("hello mymojo : "+message);
    }
}

其中注释就是maven插件很重要的元数据

执行:

mvn com.handarui.yanquan:yanquan:1.0-SNAPSHOT:echo -Decho.message="The Eagle has Landed"

(MyMojo类中的message 参数的javadoc注释是 echo.message, 通过命令赋值时,需要传入-Decho.message=XXX 这种形式 )

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用maven自定义插件开发

本文链接: https://www.lsjlt.com/news/151532.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用maven自定义插件开发
    目录Maven 插件的命名规范什么是 Mojo?创建 Mojo 工程Maven 插件的命名规范什么是 Mojo?创建 Mojo 工程简单 Mojo 的创建运行自定义 Plugin缩短...
    99+
    2022-11-13
  • 如何使用maven自定义插件开发
    这篇文章主要介绍了如何使用maven自定义插件开发的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用maven自定义插件开发文章都会有所收获,下面我们一起来看看吧。Maven 插件的命名规范一般来说,我们会...
    99+
    2023-07-02
  • SpringBoot自定义maven-plugin插件整合asm代码插桩
    目录背景项目配置编译拦截 ASM插桩项目使用背景 公司开发框架增加了web系统license授权证书校验模块,实行一台机器一个授权证书,初步方案是增加拦截器针对全局请求进行...
    99+
    2022-11-13
  • 如何为记账系统添加自定义插件功能 - 使用PHP开发自定义插件的方法
    随着业务的发展和需求的多样化,很多企业和个人都选择使用记账系统来管理财务和记账工作。然而,随着时间的推移,记账系统的功能可能无法完全满足用户的需求,这就需要我们为记账系统添加自定义插件功能,以实现个性化定制和功能扩展。本文将介绍如何使用PH...
    99+
    2023-10-21
    自定义插件 PHP开发 记账系统
  • Mybatis自定义拦截器和插件开发详解
    前言 在Spring中我们经常会使用到拦截器,在登录验证、日志记录、性能监控等场景中,通过使用拦截器允许我们在不改动业务代码的情况下,执行拦截器的方法来增强现有的逻辑。在mybati...
    99+
    2022-11-12
  • 怎么使用自定义Maven设置文件
    本文小编为大家详细介绍“怎么使用自定义Maven设置文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用自定义Maven设置文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mavensettings.x...
    99+
    2023-06-26
  • SpringBoot自定义maven-plugin插件整合asm代码插桩的方法
    这篇“SpringBoot自定义maven-plugin插件整合asm代码插桩的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2023-06-29
  • GitLab的API集成和自定义插件开发技巧
    GitLab的API集成和自定义插件开发技巧引言:GitLab是一个开源的代码托管平台,提供了丰富的API接口供开发者使用,方便进行集成和自定义插件开发。本文将介绍如何进行GitLab的API集成以及自定义插件开发的一些技巧,并提供具体的代...
    99+
    2023-10-22
    集成 GitLab API 自定义插件开发
  • SkyWalking自定义插件怎么用
    这篇文章将为大家详细讲解有关SkyWalking自定义插件怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。RabbitMQ插件问题skywalking官方提供的RabbitMQ插件存在缺陷,其只针对R...
    99+
    2023-06-29
  • winform怎么自定义控件开发
    在WinForms中自定义控件开发,可以按照以下步骤进行:1. 创建新的类,继承自现有的控件类,比如`UserControl`或`C...
    99+
    2023-10-10
    winform
  • ASP.NET如何自定义控件开发
    这篇文章主要为大家展示了“ASP.NET如何自定义控件开发”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ASP.NET如何自定义控件开发”这篇文章吧。该控件的功能如下:显示服务端时间,并不停更新...
    99+
    2023-06-17
  • Android开发之自定义控件用法详解
    本文实例讲述了Android开发之自定义控件用法。分享给大家供大家参考,具体如下: 今天和大家分享下组合控件的使用。很多时候android自定义控件并不能满足需求,如何做呢?很...
    99+
    2022-06-06
    自定义 自定义控件 android开发 Android
  • ionic2中自定义cordova插件怎么用
    这篇文章主要介绍了ionic2中自定义cordova插件怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。假设需求是 写一个日志插件,可以...
    99+
    2022-10-19
  • 小程序怎么自定义开发组件
    这篇文章主要讲解了“小程序怎么自定义开发组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“小程序怎么自定义开发组件”吧!    第一种方式,下面是一个组件的基本组成部分,样式表就不写了,  ...
    99+
    2023-06-26
  • Android开发之自定义UI组件详解
    Android开发自定义UI组件实现红色小球跟随手指移动 要写实现自定义UI组件,要创建一个BallView类,继承View类,在BallView类中创建画笔,然后重写OnDraw(...
    99+
    2022-11-12
  • 在Android开发中使用自定义组合控件的例子
    一、定义一个XML布局文件 setting_item_view.xml <?xml version="1.0" encoding="utf-8"?&...
    99+
    2022-06-06
    自定义 android开发 Android
  • vue自定义开关组件使用详解
    本文实例为大家分享了vue自定义开关组件的具体代码,供大家参考,具体内容如下 switch.vue: <template>   <div class="disLB"...
    99+
    2022-11-13
  • 怎么使用Python开发自定义Web框架
    开发自定义Web框架接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。根据请求资源路径的后缀名进行判断:如果请求资源路径的后缀名是.html则是动态资源请求, 让web框架程序进行处理。否则是静态资源请求,让web服...
    99+
    2023-05-17
    Python web
  • Android开发手册自定义Switch开关按钮控件
    目录自定义Switch外观布局样式Drawable代码自定义Switch外观 外观定制这块属于基操了,我们利用属性 android:track 和 android:thumb 定制 ...
    99+
    2022-11-13
  • maven实现docker自动化部署插件的使用
    构建开发项目 首先打开我们的IDEA构建一个我们的开发项目,配置如下: 接着打开我们的pom.xml修改build的配置,修改以后的代码如下: <build> ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作