写maven插件的初衷是了解maven插件大概的运作原理,形成对它的基本理解。
参考:自定义maven插件的实现_朱培(知浅_ZLH)-CSDN博客
maven(从零实现一个自定义插件)
不得不说,网上的博客有点捞,看着看着都不知道这是啥玩意了。
这里先严防几个问题,idea缓存!打包后最好检查一下仓库!
然后开始编写。
已得基本理解,类似于maven的依赖,即dependency。
也是使用 groupId artifactId version 来唯一定位一个 jar包,只不过这个jar包的程序是在maven的生命周期中运行的,比如maven package的时候运行这个jar包,或者install的时候运行。
先开始写我们的插件
<?xml version="1.0" encoding="UTF-8"?>
这个是pom依赖,引入的dependency是用来引入插件的api和注解。大体上和平常的工程差不多,唯一的区别就是打包形式改为了<packaging>maven-plugin</packaging>

实际打出来的也是jar包,可能是内部组织的方式不一样。
@Mojo
然后主类,也就是入口类。首先看类开头的注解mojo,里面的name是定义了一个功能,我的理解是区分不同的入口,等到后面引用插件的时候就需要这个字段。 defaultphase定义的是这段代码的运行时间,也就是在package的时候运行。我们前面说了,这代码是在maven的某个生命周期里运行的。
接着是类的编写,这里要继承AbstractMojo类,然后重写execute方法,表明入口方法。
然后是parameter注解注入参数,这个在引用的时候需要。这里有一个动态传参的方式,property=“args”,这样参数可以从mvn后 -Dargs=xxx 直接传入。
然后execute方法中写主逻辑。接着install到本地仓库当中。
接着看我们是怎么引用这个插件的,
<build>
主要是看它的传参方式和运行控制。
看到里面configuration的msg标签和options标签是不是很熟悉,居然就是我们前面定义的字段名。。然后组织list也是使用内含标签的形式。这样就传入了配置。
然后是executions。然后里面的package和ccc是不是也很熟悉,也就是指定运行时间和要运行哪个主类。(我没有去一个一个尝试修改,只是根据理所当然的猜测确认)
最后的运行方式: mvn package -Dargs=aaa
这就是另一种传参方式了。

这种最后的打印输出。
不得不说,网上的教程有些坑,可以的话还是搞本书或者系统的教程来学习一下,特别是基础小白的。
然后观察一下idea的maven设置处

注意里面一些字段的映射关系。
然后我们随便找个常用的插件来看看。
maven添加tomcat插件_帅比的博客-CSDN博客

现在看起来是不是感觉很熟悉。。

然后反编译看看,主体形式差不多,但是组织结构就丰富了很多,然后就提供了庞大的功能。其实也是类似于springboot那样,自己下载一个Tomcat的jar包,然后引用里面的类开启一个Tomcat,然后把服务部署到里面去。。仅此而已。

看到里面的这些依赖是不是很熟悉,哈哈。