整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。
Maven默认提供了很多插件,功能也非常强大,但是如果我们想自己开发一些插件,比如自定义一款自动打包并且发布到服务器然后重启服务器的插件;或者定义一款插件自动打包自动运行打包好的构件。各种好玩的东西只要你能想到,都可以通过maven插件去完成,不过我们需要先了解如何自定义maven插件。
必备知识
本篇环境
-
jdk1.8
-
maven3.6.2
-
idea
本章内容
-
自定义插件详细步骤
-
自定义插件参数的使用
-
自定义插件前缀的使用
-
手动实现打包之后自动运行的插件
自定义插件详细步骤
maven中的插件是有很多目标(goal)组成的,开发插件,实际上就是去编写插件中目标的具体代码。每个目标对应一个java类,这个类在maven中叫做MOJO,maven提供了一个Mojo的接口,我们开发插件也就是去实现这个接口的方法,这个接口是:
org.apache.maven.plugin.Mojo
接口有3个方法:
void execute() throws 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
接口中的setLog
和getLog
实现了,而execute
方法没有实现,交给继承者去实现,这个类中Log默认可以向控制台输出日志信息,maven中自带的插件都继承这个类,一般情况下我们开发插件目标可以直接继承这个类,然后实现execute
方法就可以了。
实现一个插件的具体步骤
1、 创建一个maven构件,这个构件的packaging比较特殊,必须为maven-plugin,表示这个构件是一个插件类型,如下:
pom.xml中的packageing元素必须如下值:
maven-plugin
2、导入maven插件依赖:
org.apache.maven
maven-plugin-api
3.0
org.apache.maven.plugin-tools
maven-plugin-annotations
3.4
provided
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
下面我们来实现我们第一个插件,插件构件信息:
com.javacode2018
demo1-maven-plugin
1.0-SNAPSHOT
maven-plugin
创建一个目标类demo1,调用这个目标的时候,希望他能够输出:
hello my first maven plugin!
创建一个maven项目
打开idea,点击File->New->Project
,如下图:
选择Maven
,如下图:
点击上图中的Next
,如下图,输入项目坐标信息:
点击上图中的Next
,如下图,输入Project name
为maven-chat10
:
点击上图中的Finish
,完成创建,如下图:
配置一下idea的maven环境,点击File->Settings
,如下图:
删除下面2个无用的文件夹:
创建插件模块`demo1-maven-plugin`
这次用idea创建一个插件模块demo1-maven-plugin
,具体过程如下。
在刚才的maven-chat10
项目窗口中,点击File->Project Structure
,如下图:
也可以使用快捷键
Ctrl+Alt+Shift+S
打开
选择上图找