Maven3.x 插件开发入门
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 插件开发入门相关推荐
- 【直播回顾】蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程
主讲人:萧恺(蚂蚁金服-支付宝事业群-高级开发工程师) 本名:肖汉松 讲师介绍: 热爱阅读,喜欢挑战,热衷尝试新的技术,关注技术背后的原理. 关注领域:Java 服务端开发,分布式系统 关注语言:Ja ...
- xposed模块编写教程_Xposed插件开发入门详解,
Xposed插件开发入门详解, 前言 Xposed的用处不必言说,能hook任意java写的代码,修改替换apk内部的资源文件. 至于如何开发一个XPosed的插件,官方给出的答案如下: https: ...
- 视频教程-FastAdmin插件开发入门-PHP
FastAdmin插件开发入门 2009年4月创办 淄博日诺网络科技有限公司 法人总经理 2016年负责 中国传媒大学凤凰学院 网站开发 项目负责人 2017年 参与负责 用友软件理财项目开发 郭孟涛 ...
- Maya插件开发入门
Maya插件开发入门 这里笔者给出一个创建简单的MAYA C++插件的流程. 笔者给出MEL和C++插件两个版本,实现了同样的功能. 这个插件的背景是这样的,大多人听说MAYA8. ...
- 基于jquery插件开发入门教程
鉴于最近要使用大量的jquery,所以总有一种捣鼓文字来抒发一下情绪的冲动.思前想后就来篇jquery插件开发入门教程吧,毕竟如果不想开发插件,那自己无论用别人的插件多牛逼,最多只是js的使用者,作为 ...
- carbide.c++ 插件开发入门(转)
carbide.c++ 插件开发入门(仅仅入门) 热10已有 229 次阅读 2010-07-25 20:39 标签: carbide 入门 插件 开发 symbian开发,最不爽的就是 ...
- QT浏览器插件开发入门
QT浏览器插件开发入门_百度文库 http://wenku.baidu.com/view/427755d13186bceb19e8bbbf.html
- virtualxposed使用教程_Xposed 插件开发入门教程(一)
其实网上已经有很多 Xposed 插件开发的入门教程了,我写的这篇与其说是教程,不如说是参考,为了防止以后忘了开发步骤,这里就写篇博客记录一下. 要使用 Xposed 插件,首先要 root 手机并安 ...
- ProM开发指北3——ProM插件开发入门
以下内容参考:setup/HowToCreatePluginsInProM – prom 可以参考视频教程:流程挖掘开发,ProM Workshop 介绍_哔哩哔哩_bilibili,开发部分只需看p ...
最新文章
- 近期必读的9篇CVPR 2019【域自适应(Domain Adaptation)】相关论文和代码
- android shortcut livefoulder
- TCP/IP GUIDE
- 小程序开发过程注意事项
- cario java_Cairo图形库 概述
- 1094:零起点学算法01——第一个程序Hello World!
- oracle 导入电子表格,oracle数据导入到电子表格中
- 网友在各自领域中所用到的芯片总结(转载)
- 计算机网络实验六(子网划分)
- Windows7压缩文件到最小的方法
- 压缩包文件密码忘记了文件怎么办?
- 小书匠配置github图床服务(详细版)
- c语言的源程序一行可以书写多个语句,C语言 选择题(最全版)
- windows 系统安装苹果操作系统
- 小白看了也能搭建物联网项目——物联网开发板——QD-mini板
- Python基础—内置函数、匿名函数、递归函数
- 简单工厂(静态工厂)
- Vultr VPS添加额外的IPv4地址
- SOC的定义、适用性和组成
- Caltech-UCSD Birds-200-2011