Maven工具有很多插件,各种各样的插件,让我们开发调试过程中非常方便,但是终究是有你想要的但是现目前插件不能满足的(可能性非常非常低),这个时候就需要使用其他的替代工具,或者是自己来开发一个Maven插件。

  事实上,学Maven插件开发对于我们这种小鸟意义并不大,有两个原因:1、我们平常需要使用的,几乎Maven都有提供;2、如果实在没有,那一般来说都有类似的工具作为替代,我们可以去使用另外的工具。但是,我们对Maven使用,研究深入了以后,学学他的插件开发来玩一下还是不错的。这对Maven的精髓思想的理解还是有很大帮助的。

  这里的的插件开发工具是Eclipse-Mars版本。

  1、创建插件项目:(项目原型选择插件类型)

  

  2、Artifact Id 以xxx-maven-plugin命名,如:gr-maven-plugin,下面Version的内容无所谓。

  

  3、创建完毕之后的结构是这样:

  

  4、修改pom.xml文件,加上2个依赖:分别是maven-plugin-api和maven-plugin-annotations,前者是插件开发API,后者是插件中使用的注解定以的包,注意打包方式为:<packaging>maven-plugin</packaging>。完整的pom.xml文件如下,一定要把自动生成那些没用的东西删掉,只留下下面的内容,否则运行插件的时候有可能报错。

<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>com.mook.plugin</groupId><artifactId>gr-maven-plugin</artifactId><version>1.0-RELEASE</version><packaging>maven-plugin</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.apache.maven</groupId><artifactId>maven-plugin-api</artifactId><version>2.0</version></dependency><dependency><groupId>org.apache.maven.plugin-tools</groupId><artifactId>maven-plugin-annotations</artifactId><version>3.2</version><scope>provided</scope></dependency></dependencies>
</project>

  5、删掉默认的包,自己新建一个包com.mook.plugin.gr,在这个包下面创建一个类叫做Car,继承AbstractMojo类。重写里面的execute方法。如下:

@Mojo(name = "drive")
public class Car extends AbstractMojo {@Overridepublic void execute() throws MojoExecutionException, MojoFailureException {System.out.println("Car drive...");}}

  6、这样插件就开发完成了。我们将插件install到本地仓库。然后在项目组引入,可以是在本插件项目中引入,也可以在其他项目中引入。

    <build><plugins><plugin><groupId>com.mook.plugin</groupId><artifactId>gr-maven-plugin</artifactId><version>1.0-RELEASE</version></plugin></plugins></build>

  7、使用eclipse的Maven插件来运行,这里的Maven插件实质Eclipse的Maven插件,而不是Maven自己的插件。如下:

  

  8、输出结果:Car drive...结果显然是正确的。

  

  9、这里来解释下里面有几个细节。

    1、插件artifactId为什么使用xxx-maven-plugin(或者xxx-plugin-maven),这个是约定的,如果这样命名,在启动插件的时候就可以像上面那样gr:drive。否则就的把gr改成groupId:artifactId:version:xxx这种方式,很不方便,当然也有另外的方式处理,在settings文件里面增加pluginManageMent内容,也能实现简化写法。(这个地方改一下,在我们的pom.xml文件中,plugins下面的maven-plugin-plugin中的<goalPrefix>标签下是可以配置这个前缀名称的,比如我这里配置co,那么启动就是co:drive),如下:

            <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-plugin-plugin</artifactId><version>3.2</version><configuration><goalPrefix>co</goalPrefix><skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound></configuration><executions><execution><id>mojo-descriptor</id><goals><goal>descriptor</goal></goals></execution><execution><id>help-goal</id><goals><goal>helpmojo</goal></goals></execution></executions></plugin>

    2、注解@Mojo是必须要的,这是定义插件对象的启动方法,由于该类只有一个方法,所以启动方法和启动类是一致的。在Maven 3之前是使用注释注解:@goal xxx这种方式。现在已经不使用这种方式了。

    3、我们平时在使用Maven的各种插件的时候往往都能在配置文件中传入属性的值,比如tomcat-maven-plugin插件我们可以随意指定tomcat的端口号。这里插件的处理方式是在Car类中定义一些属性,比如下面这样。然后我们重新将插件install到本地仓库。再次运行。

@Mojo(name = "drive")
public class Car extends AbstractMojo {@Parameter(defaultValue = "8080")private Integer port;@Overridepublic void execute() throws MojoExecutionException, MojoFailureException {System.out.println("Car drive...");System.out.println(port);}}

    输出结果:

    

    那么,在插件的配置中增加Configuration标签,加上子标签<port>,如下:

            <plugin><groupId>com.mook.plugin</groupId><artifactId>gr-maven-plugin</artifactId><version>1.0-RELEASE</version><configuration><port>8090</port></configuration></plugin>

    那么,结果就是8090,这就是插件的参数设置方式。

    

  10、到这里基本上就介绍完了。关于插件的运行,关系到Maven的生命周期,阶段和目标这几个概念。这是另外一个话题了。

  

  其他:新建的eclipse项目上面报错,显示execution not covered by lifecycle这种错误,搜了一下,在<build>下<pluginManagement>下<plugins>中加入:

<plugin><groupId>org.eclipse.m2e</groupId><artifactId>lifecycle-mapping</artifactId><version>1.0.0</version><configuration><lifecycleMappingMetadata><pluginExecutions><pluginExecution><pluginExecutionFilter><groupId>org.apache.maven.plugins</groupId><artifactId>maven-plugin-plugin</artifactId><versionRange>[3.2,)</versionRange><goals><goal>descriptor</goal><goal>helpmojo</goal></goals></pluginExecutionFilter><action><ignore></ignore></action></pluginExecution></pluginExecutions></lifecycleMappingMetadata></configuration></plugin>

其中:groupId,artifactId,versionRange,goals是需要自己去改变的,因为不有可能其他的插件也会报这个错误,按照这几个标签内容改就行了,我这里是maven-plugin-plugin这个插件在报错。

Maven3.x 插件开发入门相关推荐

  1. 【直播回顾】蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程

    主讲人:萧恺(蚂蚁金服-支付宝事业群-高级开发工程师) 本名:肖汉松 讲师介绍: 热爱阅读,喜欢挑战,热衷尝试新的技术,关注技术背后的原理. 关注领域:Java 服务端开发,分布式系统 关注语言:Ja ...

  2. xposed模块编写教程_Xposed插件开发入门详解,

    Xposed插件开发入门详解, 前言 Xposed的用处不必言说,能hook任意java写的代码,修改替换apk内部的资源文件. 至于如何开发一个XPosed的插件,官方给出的答案如下: https: ...

  3. 视频教程-FastAdmin插件开发入门-PHP

    FastAdmin插件开发入门 2009年4月创办 淄博日诺网络科技有限公司 法人总经理 2016年负责 中国传媒大学凤凰学院 网站开发 项目负责人 2017年 参与负责 用友软件理财项目开发 郭孟涛 ...

  4. Maya插件开发入门

    Maya插件开发入门      这里笔者给出一个创建简单的MAYA C++插件的流程.      笔者给出MEL和C++插件两个版本,实现了同样的功能. 这个插件的背景是这样的,大多人听说MAYA8. ...

  5. 基于jquery插件开发入门教程

    鉴于最近要使用大量的jquery,所以总有一种捣鼓文字来抒发一下情绪的冲动.思前想后就来篇jquery插件开发入门教程吧,毕竟如果不想开发插件,那自己无论用别人的插件多牛逼,最多只是js的使用者,作为 ...

  6. carbide.c++ 插件开发入门(转)

    carbide.c++ 插件开发入门(仅仅入门) 热10已有 229 次阅读  2010-07-25 20:39   标签:  carbide  入门  插件  开发 symbian开发,最不爽的就是 ...

  7. QT浏览器插件开发入门

    QT浏览器插件开发入门_百度文库 http://wenku.baidu.com/view/427755d13186bceb19e8bbbf.html

  8. virtualxposed使用教程_Xposed 插件开发入门教程(一)

    其实网上已经有很多 Xposed 插件开发的入门教程了,我写的这篇与其说是教程,不如说是参考,为了防止以后忘了开发步骤,这里就写篇博客记录一下. 要使用 Xposed 插件,首先要 root 手机并安 ...

  9. ProM开发指北3——ProM插件开发入门

    以下内容参考:setup/HowToCreatePluginsInProM – prom 可以参考视频教程:流程挖掘开发,ProM Workshop 介绍_哔哩哔哩_bilibili,开发部分只需看p ...

最新文章

  1. 近期必读的9篇CVPR 2019【域自适应(Domain Adaptation)】相关论文和代码
  2. android shortcut livefoulder
  3. TCP/IP GUIDE
  4. 小程序开发过程注意事项
  5. cario java_Cairo图形库 概述
  6. 1094:零起点学算法01——第一个程序Hello World!
  7. oracle 导入电子表格,oracle数据导入到电子表格中
  8. 网友在各自领域中所用到的芯片总结(转载)
  9. 计算机网络实验六(子网划分)
  10. Windows7压缩文件到最小的方法
  11. 压缩包文件密码忘记了文件怎么办?
  12. 小书匠配置github图床服务(详细版)
  13. c语言的源程序一行可以书写多个语句,C语言 选择题(最全版)
  14. windows 系统安装苹果操作系统
  15. 小白看了也能搭建物联网项目——物联网开发板——QD-mini板
  16. Python基础—内置函数、匿名函数、递归函数
  17. 简单工厂(静态工厂)
  18. Vultr VPS添加额外的IPv4地址
  19. SOC的定义、适用性和组成
  20. Caltech-UCSD Birds-200-2011

热门文章

  1. 这次的人工智能是“有用”的人工智能
  2. 机器学习笔记十四:随机森林
  3. 国外发明的10大仿生机械,这才是真正的黑科技!
  4. 数量庞大!中国成长型AI企业研究报告
  5. 干货|六维力和力矩传感器的技术与应用
  6. ​CPU将进入新时代:押注计算芯片的极限协同设计
  7. 这个“大脑”收获一份大奖!
  8. AI与网络安全的未来:数据集与协同能力
  9. 波士顿动力发布新版人形机器人:能跳跃旋转、后空翻
  10. 大跌眼镜!杭州一程序员年薪 30 万,竟靠偷车厘子缓解压力?