Maven插件的编写
Eclipse上如果想要开发Maven的插件,首先要确保该eclipse已经安装了m2e插件。IDEA则自带了Maven的插件,可以直接进行开发。
Eclipse
- 新建一个Maven工程
2 选择由archetype生成(注意,不要勾选)
3 选择archetype
在filter选项中输入plugin进行过滤,选择筛选出来的第一个archetype:maven-archetype-plugin。
4 填写坐标信息
5 查看自动生成的代码
自动生成的Mojo类:MyMojo
package dev.lyj.summary.mymojo_maven_plugin;import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** Goal which touches a timestamp file.** @deprecated Don't use!*/
@Mojo( name = "touch", defaultPhase = LifecyclePhase.PROCESS_SOURCES )
public class MyMojo extends AbstractMojo
{/*** Location of the file.*/@Parameter( defaultValue = "${project.build.directory}", property = "outputDir", required = true )private File outputDirectory;public void execute() throws MojoExecutionException{File f = outputDirectory;if ( !f.exists() ){f.mkdirs();}File touch = new File( f, "touch.txt" );FileWriter w = null;try{w = new FileWriter( touch );w.write( "touch.txt" );}catch ( IOException e ){throw new MojoExecutionException( "Error creating file " + touch, e );}finally{if ( w != null ){try{w.close();}catch ( IOException e ){// ignore}}}}
}
自动生成的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>dev.lyj.summary</groupId><artifactId>mymojo-maven-plugin</artifactId><version>0.0.1-SNAPSHOT</version><packaging>maven-plugin</packaging><name>mymojo-maven-plugin Maven Plugin</name><!-- FIXME change it to the project's website --><url>http://maven.apache.org</url><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><dependency><groupId>org.codehaus.plexus</groupId><artifactId>plexus-utils</artifactId><version>3.0.8</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-plugin-plugin</artifactId><version>3.2</version><configuration><goalPrefix>mymojo-maven-plugin</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></plugins></build><profiles><profile><id>run-its</id><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-invoker-plugin</artifactId><version>1.7</version><configuration><debug>true</debug><cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo><pomIncludes><pomInclude>*/pom.xml</pomInclude></pomIncludes><postBuildHookScript>verify</postBuildHookScript><localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath><settingsFile>src/it/settings.xml</settingsFile><goals><goal>clean</goal><goal>test-compile</goal></goals></configuration><executions><execution><id>integration-test</id><goals><goal>install</goal><goal>integration-test</goal><goal>verify</goal></goals></execution></executions></plugin></plugins></build></profile></profiles>
</project>
IDEA
IDEA与Eclipse生成的稍微有点不同:
首先,在选择archetype上,idea给的选项中没有:maven-archetype-plugin,而是:maven-archetype-mojo。
idea自动生成的类MyMyjo。
package dev.lyj.summary;import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** Goal which touches a timestamp file.** @goal touch* * @phase process-sources*/
public class MyMojoextends AbstractMojo
{/*** Location of the file.* @parameter expression="${project.build.directory}"* @required*/private File outputDirectory;public void execute()throws MojoExecutionException{File f = outputDirectory;if ( !f.exists() ){f.mkdirs();}File touch = new File( f, "touch.txt" );FileWriter w = null;try{w = new FileWriter( touch );w.write( "touch.txt" );}catch ( IOException e ){throw new MojoExecutionException( "Error creating file " + touch, e );}finally{if ( w != null ){try{w.close();}catch ( IOException e ){// ignore}}}}
}
可以看出,这两种archetype生成的类,还是有差别的。第一种生成的Mojo类上使用的是普通注解 @Mojo,而第二种生成的Mojo类上使用的是Javadoc式的注解@goal和@phase,总之是两种风格的注解。
通过对比发现,第一种的注解没有第二种的简单明了,第二种一看就知道goal是touch,默认phase是process-sources,而且第一种注解上边有个注释标注这种写法(@deprecated)过时了。另外在参数配置上也有不同。
maven-archetype-plugin:
maven-archetype-mojo:
所以,我还是倾向于适用idea中插件生成的这种写法。
不过,我看了一下,官方给的例子,用的还是第一种的写法。
接下来我们来看一下很重的一部分,参数的配置方法。
Mojo离开了参数一点儿意义都没有。参数提供了一些重要功能:
- 它提供了钩子机制,允许用户根据需求调整插件的行为
- 它提供了一种轻松获取POM中元素值的方式,而不用操纵对象
在Mojo中定义参数
在mojo中定义参数就像和创建实例变量一样简单,然后为他们添加注解。下边就是一个简单的mojo参数的例子:
/*** The greeting to display.*/@Parameter( property = "sayhi.greeting", defaultValue = "Hello World!" )private String greeting;
注解的上边是参数的描述部分。这个参数注解标识了这个变量是一个mojo参数。
- 注解中的defaultValue参数,定义了标注变量的默认值。它的值可以包含执行project的表达式,例如 “${project.version}”(更多内容请看“Parameter Expressions” 文档)。
- property参数表示,允许通过获取命令行中-D选项指定的系统属性,来配置mojo参数。
在项目中使用Mojo参数
参数定义完了,该怎么使用呢?
插件参数值的设置,将作为插件定义的一部分,配置在Maven项目中的pom.xml文件中。一个配置插件的例子:
<plugin><groupId>sample.plugin</groupId><artifactId>hello-maven-plugin</artifactId><version>1.0-SNAPSHOT</version><configuration><greeting>Welcome</greeting></configuration>
</plugin>
在配置区域,参数的名字(mojo类的属性名)”greeting”作为元素名称,元素内容”Welcome”则被作为值赋给参数。
更多详细内容参见 Guide to Configuring Plugins
单值的参数类型
下边列出的是可以在你的mojo中使用的各种单值,以及这些单值在POM中的使用规则。
Boolean 布尔
Fixed-Point Numbers 整型
Floating-Point Numbers 浮点型
Dates 日期
Files and Directories 文件和目录
URLs 网络地址
Plain Text 普通文本
Enums 枚举类型
值参数类型
Arrays 数组
Collections 集合
Maps map
Properties 属性
Other Object Classes 其他对象类类型
Maven插件的编写相关推荐
- java自定义maven插件_Maven自定义插件的实现
为了快速学习自定义 Maven 插件的过程,接下来将实现一个简单的 Hello Maven 插件,功能很简单:输出 Hello World 插件.具体步骤和操作如下. 创建 Maven 新项目,选择 ...
- dojo还有人用吗_我的Dojo中有一个Mojo(如何编写Maven插件)
dojo还有人用吗 我一直忙于在工作中使用Maven的腋窝. 对于很多开发人员,我会听到:"那又怎样." 区别在于,我通常在无法直接访问Internet的环境中工作. 因此,当我说 ...
- maven插件编写_编写Maven插件的提示
maven插件编写 最近,我花了很多时间为Maven编写插件或在其中工作. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使编写它们时的生活更轻松. 提示1:将任务与Mojo分开 最初,您将把moj ...
- 我的Dojo中有一个Mojo(如何编写Maven插件)
我一直忙于在工作中使用Maven的腋窝. 对于很多开发人员,我会听到:"那又怎样." 不同之处在于,我通常在无法直接访问Internet的环境中工作. 因此,当我说我经常使用Mav ...
- 编写Maven插件的提示
最近,我花了很多时间来编写或为Maven开发插件. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使他们在编写时变得更轻松. 提示1:将任务与Mojo分开 最初,您将把mojo的所有代码放入mojo ...
- maven 插件之 AutoConfig 工具使用笔记
AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用.在我们的工作中,会将自己写的代码打成 jar 包或者 war 包发布到各种环境上.一般地,不用的环境所使用的数据库. ...
- 常用Maven插件介绍(上)
转自 : http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务, ...
- 初探maven插件机制
初探maven插件机制 第一部分 Plexus 本质上说,Maven是一个plugin的框架,所以需要有一个管理者来管理这些plugin.Maven选择了Plexus作为plugin的管理者.作为初探 ...
- Maven实战——常用Maven插件介绍
http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任 ...
最新文章
- windows mongodb 安装
- JAVA共有几种窗体布局方式_在Java GUI程序开发中常见的三种布局管理器是什么
- [学习笔记]电磁场与电磁波
- jvm性能调优 - 22JVM GC回顾
- ubuntu服务器启动过程中重启卡死的问题解决办法
- 设计一个笔记本电脑类,属性随意,并且进行属性私有化,对外提供公开的set和get方法。 设计一个可插拔的接口:InsertDrawable,该接口有什么方法自行定义。
- 【图像处理-直方图】
- Linux下文件内容查阅命令
- Typescript 类型的常用知识与技能
- 基于SSM的猫头鹰在线影院订票网站
- 微信小程序网络请求封装
- Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
- lisp怎么改成vlx_如何用CAD自带的VLisp修改Lisp文件并且生成vlx文件??
- 利用MapGis6.7 对 jpg图像文件进行图形校准
- 条码软件如何将标签文件输出为PDF文档
- 【01】分别使用头插法和尾插法建立单链表
- 麦吉尔大学的数学与计算机科学,麦吉尔大学数学与计算机科学本科.pdf
- Unity - 使用Winform制作简易登录器
- LINUX新手入门及安装配置FAQ(http://bbs.blueidea.com/viewthread.php?tid=635906amp;page=)
- YOLOv5~目标检测模型精确度
热门文章
- 防止 SQL 注入的 PHP MySQLi 准备语句教程
- 「3D建模」用ZBrush制作兔子模型教程
- 从Linux服务器下载文件和文件夹到本地命令
- 黑客白话: 客厅的路由器 会出卖你
- OSChina 周一乱弹 —— 编程从娃娃抓起,你怕了吗?
- 苹果手机可以分屏吗_苹果手机可以边打电话边录音吗
- 6-4 多线程编程:使用多线程同步与通信,模拟实现售票系统的售票和退票过程。 (20 分)
- Unity 中 2D 人物多段跳的简单实现
- 王者微信去什么服务器好,王者荣耀2021微信区和QQ区哪个更加简单?上分的话哪个更轻松?...
- 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)