Maven学习笔记之如何编写Maven项目的Plugins插件
背景
今天临下班时,同事询问我如何编写Maven Plugins,因为没有接触过相关知识,遂回家查阅了相关文档后编写了一个demo,实现了一个简单的maven plugins。
项目需求
开发一个Maven Plugin,并且运行它的时候将在控制台打印当前时间。
开发工具
- Intellij IDEA 2018.2.3(下文简称“IDEA”)
创建Maven Plugin
首先,我们使用IDEA创建一个新的Maven项目。
-
File -> New - > Project
-
依次输入你项目的GroupId、ArtifactId、Vserion
-
选择项目依赖的Maven地址和你需要配置的其他Properties
-
选择你项目存放的地址
-
稍等片刻,待项目构建好后项目架构如下:
项目搭建好后,我们就可以进行Maven Plugin的开发了。
在开始开发之前,我们先来了解下什么是Maven Plugin。
Maven的工具由一个又一个的插件组成的,插件类继承了AbstractMojo类,需要覆写execute方法。
getLog()获取的是AbstractMojo内部的log,类型是:org.apache.maven.plugin.logging.Log; 在Mojo的开发中,不要使用其他的Log基础设施。注: Mojo = Maven Old Java Object;
引用地址:https://www.cnblogs.com/yves/p/6085594.html
- 接下来,我们引用两个maven依赖:maven-plugin-api和maven-plugin-annotations,前者是Maven插件开发的Api,后者则是Maven插件注解的Api
<!-- https://mvnrepository.com/artifact/org.apache.maven/maven-plugin-api -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugin-tools/maven-plugin-annotations -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5.2</version>
<scope>provided</scope>
</dependency>
- 接着设置packaging
<packaging>maven-plugin</packaging>
- 创建一个继承了AbstractMojo的插件入口实现类,该实现类必需加上Mojo注解用来标注其为启动类。
package com.qianlingo;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* Run Class for maven plugin
* @author qianling@qianlingo.com
*/
@Mojo(name = "dateTime")
public class DateTime extends AbstractMojo {
/**
* 执行插件
* @throws MojoExecutionException 插件执行出错异常
* @throws MojoFailureException 插件执行失败异常
*/
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
System.out.println(LocalDateTime.now().format(dateTimeFormatter));
}
}
- 执行Maven的clean、install,打包插件生成类库
- 构建成功时我们可以在本地Maven仓库找到该Maven插件的类库,如下图:
引用Maven Plugin
到这一步,我们就可以在其他项目中引用该插件啦
<plugin>
<groupId>com.qianlingo</groupId>
<artifactId>datetime</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>
结尾
至此,一个简单的Maven Plugin插件就编写完成了。大家可以在熟悉这个操作的基础上编写自己的需求代码。
作者已将该Maven Plugin项目放至码云,代码虽简单,但还是喜欢能给你带来帮助。
码云地址:https://gitee.com/qianlingooo/maven-plugin-datetime