手撸一款属于自己的Maven插件,说干就干
Posted 冰 河
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手撸一款属于自己的Maven插件,说干就干相关的知识,希望对你有一定的参考价值。
大家好,我是冰河~~
今天,冰河给大家分享一篇大部分人都不会的技能,那就是我们自己动手写一款属于自己的Maven插件。好了,直接进入今天的主题吧。
Maven插件的相关概念
插件坐标定位
插件与普通jar包一样包含坐标定位属性即:groupId、artifactId、version,当使用该插件时会从本地仓库中搜索,如果没有则从远程仓库下载,例如下面的配置所示。
<!-- 唯一定位到dependency 插件 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
execution配置
execution 配置包含一组指示插件如何执行的属性:
- id : 执行器命名
- phase:标识执行的阶段
- goals:标识执行的目标或功能
- configuration:标识执行目标所需的配置文件
插件的配置和使用示例
将插件依赖拷贝到指定目录。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
常用插件的使用
通过命令执行插件语法
除了通过配置的方式使用插件以外,Maven也提供了通过命令直接调用插件目标其命令格式如下所示。
mvn groupId:artifactId:version:goal -D{参数名}
通过命令执行插件示例
(2)展示pom的依赖关系树
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree
(3)直接简化版的命令,但前提必须是maven 官方插件
mvn dependency:tree
其它常用插件
(1)查看pom 文件的最终配置
mvn help:effective-pom
(2)原型项目生成
archetype:generate
(3)快速创建一个Web程序
mvn archetype:generate -DgroupId=io.mykit.web -DartifactId=mykit-maven-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
(4)快速创建一个Java项目
mvn archetype:generate -DgroupId=io.mykit.java -DartifactId=mykit-maven-java -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
自定义Maven插件
这里,我们先来说说自定义Maven插件的步骤,这里,我将自定义Maven插件的步骤总结如下。
(1)创建maven 插件项目
(2)设定packaging 为maven-plugin
(3)添加插件依赖
(4)编写插件实现逻辑
(5)打包构建插件
接下来,我们就来实现自定义Maven插件。
配置插件项目的pom.xml
这里,我直接跳过了Maven项目的创建,相信小伙伴们都会创建Maven项目,这里,我就不再赘述了,直接给出pom.xml文件的配置,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.mykit.plugin</groupId>
<version>1.0.0-SNAPSHOT</version>
<artifactId>mykit-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8 </source>
<target>1.8 </target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven插件的实现类
接下来,我们来编写Maven插件的实现类。这里,我直接给出类的源代码,如下所示。
package io.mykit.plugin;
import javafx.beans.DefaultProperty;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
/**
* @author binghe
* @description 自定义Maven插件
*/
@Mojo(name = "binghe")
public class MykitMavenPlugin extends AbstractMojo {
private final Logger logger = LoggerFactory.getLogger(MykitMavenPlugin.class);
@Parameter(property="sex")
String sex;
@Parameter(property="describe")
String describe;
public void execute() throws MojoExecutionException, MojoFailureException {
logger.info(String.format("binghe sex=%s describe=%s",sex,describe));
}
}
打包安装插件
将自定义的Maven插件打包并安装到本地Maven仓库,如下所示。
- 打包
mvn clean package
- 安装到本地仓库
mvn clean install
其他项目中引用自定义插件
如果需要在其他项目中使用我们自定义的Maven插件,则只需要创建一个Maven项目,在Maven项目的pom.xml文件中引入如下配置即可。
<build>
<plugins>
<plugin>
<!--引入刚刚的插件依赖-->
<groupId>io.mykit.plugin</groupId>
<version>1.0.0-SNAPSHOT</version>
<artifactId>mykit-maven-plugin</artifactId>
<!-- 这里加入的是相关参数,这些参数必须跟插件实现里面的属性保持一致 -->
<configuration>
<sex>男</sex>
<describe>冰河技术微信公众号作者</describe>
</configuration>
</plugin>
</plugins>
</build>
写在最后
如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~
推荐阅读:
- 《实践出真知:全网最强秒杀系统架构解密,不是所有的秒杀都是秒杀!!》
- 《从零到上亿用户,我是如何一步步优化MySQL数据库的?(建议收藏)》
- 《我用多线程进一步优化了亿级流量电商业务下的海量数据校对系统,性能再次提升了200%!!(全程干货,建议收藏)》
- 《我用多线程优化了亿级流量电商业务下的海量数据校对系统,性能直接提升了200%!!(全程干货,建议收藏)》
- 《我用10张图总结出了这份并发编程最佳学习路线!!(建议收藏)》
- 《高并发场景下一种比读写锁更快的锁,看完我彻底折服了!!(建议收藏)》
- 《全网最全性能优化总结!!(冰河吐血整理,建议收藏)》
- 《三天撸完了MyBatis,各位随便问!!(冰河吐血整理,建议收藏)》
- 《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些并发编程知识是你必须要掌握的!完整学习路线!!(建议收藏)》
- 《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些核心技能是你必须要掌握的!完整学习路线!!(建议收藏)》
- 《奉劝那些刚参加工作的学弟学妹们:这些计算机与操作系统基础知识越早知道越好!万字长文太顶了!!(建议收藏)》
- 《我用三天时间开发了一款老少皆宜的国民级游戏,支持播放音乐,现开放完整源代码和注释(建议收藏)!!》
- 《我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)》
- 《毕业五年,从月薪3000到年薪百万,我掌握了哪些核心技能?(建议收藏)》
- 《我入侵了隔壁妹子的Wifi,发现。。。(全程实战干货,建议收藏)》
- 《千万不要轻易尝试“熊猫烧香”,这不,我后悔了!》
- 《清明节偷偷训练“熊猫烧香”,结果我的电脑为熊猫“献身了”!》
- 《7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)》
- 《在业务高峰期拔掉服务器电源是一种怎样的体验?》
- 《全网最全Linux命令总结!!(史上最全,建议收藏)》
- 《用Python写了个工具,完美破解了MySQL!!(建议收藏)》
- 《SimpleDateFormat类到底为啥不是线程安全的?(附六种解决方案,建议收藏)》
- 《MySQL 8中新增的这三大索引,直接让MySQL起飞了,你竟然还不知道!!(建议收藏)》
- 《撸完Spring源码,我开源了这个分布式缓存框架!!(建议收藏)》
- 《亿级流量高并发秒杀系统商品“超卖”了,只因使用的JDK同步容器中存在这两个巨大的坑!!(踩坑实录,建议收藏)》
- 《奉劝那些刚参加工作的学弟学妹们:要想学好并发编程,这些并发容器的坑是你必须要注意的!!(建议收藏)》
- 《公司的报表工具太难用,我三天撸了个Excel工具,运营小姐姐直呼太好用了,现已开源!!(建议收藏)》
- 《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些并发编程核心技能是你必须要掌握的!!(建议收藏)》
- 《阿里面试官:高并发大流量秒杀系统如何正确的解决库存超卖问题?(建议收藏)》
- 《Redis五大数据类型与使用场景汇总!!(含完整实战案例,建议收藏)》
好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~
以上是关于手撸一款属于自己的Maven插件,说干就干的主要内容,如果未能解决你的问题,请参考以下文章