Maven笔记 - 第十章

第10篇:自定义插件,maven的生命交给你来设计!

maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能。

这是maven系列第10篇。

整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。

Maven默认提供了很多插件,功能也非常强大,但是如果我们想自己开发一些插件,比如自定义一款自动打包并且发布到服务器然后重启服务器的插件;或者定义一款插件自动打包自动自动运行打包好的构件。各种好玩的东西只要你能想到,都可以通过maven插件去完成,不过我们需要先了解如何自定义maven插件。

必备知识

  1. Maven系列第6篇:生命周期和插件详解,高手必备!

本篇环境

  1. jdk1.8

  2. maven3.6.2

  3. idea

本章内容

  1. 自定义插件详细步骤

  2. 自定义插件参数的使用

  3. 自定义插件前缀的使用

  4. 手动实现打包之后自动运行的插件

自定义插件详细步骤

maven中的插件是有很多目标(goal)组成的,开发插件,实际上就是去编写插件中目标的具体代码。每个目标对应一个java类,这个类在maven中叫做MOJO,maven提供了一个Mojo的接口,我们开发插件也就是去实现这个接口的方法,这个接口是:

org.apache.maven.plugin.Mojo

接口有3个方法:

void execute()  MojoExecutionException, MojoFailureException;
void setLog( Log log );
Log getLog();
  • execute:这个方法比较重要,目标的主要代码就在这个方法中实现,当使用mvn命令调用插件的目标的时候,最后具体调用的就是这个方法。

  • setLog:注入一个标准的Maven日志记录器,允许这个Mojo向用户传递事件和反馈

  • getLog:获取注入的日志记录器

说一下上面这个Log,这是一日志接口,里面定义了很多方法,主要用户向交互者输出日志,比如我们运行mvn clean,会输出很多提示信息,这些输出的信息就是通过Log来输出的。

Mojo接口有个默认的抽象类:

org.apache.maven.plugin.AbstractMojo

这个类中把Mojo接口中的setLoggetLog实现了,而execute方法没有实现,交给继承者去实现,这个类中Log默认可以向控制台输出日志信息,maven中自带的插件都继承这个类,一般情况下我们开发插件目标可以直接继承这个类,然后实现execute方法就可以了。

实现一个插件的具体步骤

1、 创建一个maven构件,这个构件的packaging比较特殊,必须为maven-plugin,表示这个构件是一个插件类型,如下:

pom.xml中的packageing元素必须如下值:

<packaging>maven-plugin</packaging>
2、导入maven插件依赖:
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.0</version>
</dependency>

<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.4</version>
    <scope>provided</scope>
</dependency>
3、创建一个目标类,需要继承org.apache.maven.plugin.AbstractMojo
4、目标类中添加注解@Mojo注解:
@org.apache.maven.plugins.annotations.Mojo(name="目标名称")

注意@Mojo注解用来标注这个类是一个目标类,maven对插件进行构建的时候会根据这个注解来找到这个插件的目标,这个注解中还有其他参数,后面在详细介绍。

5、在目标类的execute方法中实现具体的逻辑
6、安装插件到本地仓库:插件的pom.xml所在目录执行下面命令
mvn clean install

或者可以部署到私服仓库,部署方式和其他构件的方式一样,这个具体去看前面文章的私服的文章。

7、让使用者去使用插件

案例1

下面我们来实现我们第一个插件,插件构件信息:

<groupId>com.javacode2018</groupId>
<artifactId>demo1-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>

创建一个目标类demo1,调用这个目标的时候,希望他能够输出:

hello my first maven plugin!
创建一个maven项目

打开idea,点击File->New->Project,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7QGWVgu-1629908740221)(media/40b81c016bc4695b99669f13d4af01fc.png)]

选择Maven,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpWEPsmt-1629908740225)(media/29baa68faa1523b9e69503e0d4215eaa.png)]

点击上图中的Next,如下图,输入项目坐标信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfb9FhRG-1629908740229)(media/225faaebb3a428977aa17855f14fe700.png)]

点击上图中的Next,如下图,输入Project namemaven-chat10

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rwq9IZ8l-1629908740233)(media/6c8782fcc498d677fc7b9abfd95f95b6.png)]

点击上图中的Finish,完成创建,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWmbgDMQ-1629908740236)(media/ad5ab3b6a563560a390f7d13a0c5701d.png)]

配置一下idea的maven环境,点击File->Settings,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JycBnj6d-1629908740240)(media/31e6ec12f10e0a9ca95e121685f815ae.png)]

删除下面2个无用的文件夹:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RALiKTwP-1629908740245)(media/68c1daa77d794421891803b7f6d1fc30.png)]

创建插件模块demo1-maven-plugin

这次用idea创建一个插件模块demo1-maven-plugin,具体过程如下。

在刚才的maven-chat10项目窗口中,点击File->Project Structure,如下图:

也可以使用快捷键Ctrl+Alt+Shift+S打开

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPebFzeb-1629908740249)(media/b7e6a8a3a532b21d3b1cb6856b94edd3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcB9ZJuO-1629908740253)(media/e43fc5acb27a2e9bb8cd266ea932f278.png)]

选择上图找你的Modules,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECEuxh1M-1629908740255)(media/3ce9a3acab62ae38614b19baeadadec5.png)]

点击+,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXVb49zy-1629908740257)(media/a0c7b7e5e99236811db416695282bb32.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63PKsU2y-1629908740259)(media/2f70ab7d2efa05b81336a598b8ae4b51.png)]

选择上图中的New Module,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-quJJ27Gh-1629908740261)(media/c8b78f9c86e120b9721e2dcba3fa7606.png)]

选择上图左侧的Maven,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zeWuodqE-1629908740262)(media/b2e32be73edd42d4f5dee01a33106027.png)]

点击上图中的Next,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Risad6pj-1629908740264)(media/41d93688bbdd89f5442c1a371f7e576a.png)]

Add as module to设置为maven-chat10,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yuth0uAC-1629908740266)(media/fc26e489460f14ff620e5e870a3073e8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kprvWmuW-1629908740267)(media/9dbcf35404f710a23c7cc117ff28f504.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EiLpxwOm-1629908740269)(media/2311f90a15ae166c019a05fb72ed84f6.png)]

上图中输入坐标信息,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RrSaXjh1-1629908740270)(media/879707742287a5d4dfa8c72d25356073.png)]

点击上图中的Next,默认如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jgg6t8bL-1629908740272)(media/eb247b603eee61f8595d53770405c01f.png)]

修改上图中Module namedemo1-maven-plugin,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQYFhk4B-1629908740273)(media/9232592562dfd46319347e713a1e5ea0.png)]

点击上图的Finish,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmWOh5aY-1629908740274)(media/777d3f4b80daea8a8093d213e9b69056.png)]

点击上图中的OK按钮,完成创建工作,目前项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值