Eclipse上如果想要开发Maven的插件,首先要确保该eclipse已经安装了m2e插件。IDEA则自带了Maven的插件,可以直接进行开发。

Eclipse

  1. 新建一个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离开了参数一点儿意义都没有。参数提供了一些重要功能:

  1. 它提供了钩子机制,允许用户根据需求调整插件的行为
  2. 它提供了一种轻松获取POM中元素值的方式,而不用操纵对象

在Mojo中定义参数

在mojo中定义参数就像和创建实例变量一样简单,然后为他们添加注解。下边就是一个简单的mojo参数的例子:

    /*** The greeting to display.*/@Parameter( property = "sayhi.greeting", defaultValue = "Hello World!" )private String greeting;

注解的上边是参数的描述部分。这个参数注解标识了这个变量是一个mojo参数。

  1. 注解中的defaultValue参数,定义了标注变量的默认值。它的值可以包含执行project的表达式,例如 “${project.version}”(更多内容请看“Parameter Expressions” 文档)。
  2. 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插件的编写相关推荐

  1. java自定义maven插件_Maven自定义插件的实现

    为了快速学习自定义 Maven 插件的过程,接下来将实现一个简单的 Hello Maven 插件,功能很简单:输出 Hello World 插件.具体步骤和操作如下. 创建 Maven 新项目,选择 ...

  2. dojo还有人用吗_我的Dojo中有一个Mojo(如何编写Maven插件)

    dojo还有人用吗 我一直忙于在工作中使用Maven的腋窝. 对于很多开发人员,我会听到:"那又怎样." 区别在于,我通常在无法直接访问Internet的环境中工作. 因此,当我说 ...

  3. maven插件编写_编写Maven插件的提示

    maven插件编写 最近,我花了很多时间为Maven编写插件或在其中工作. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使编写它们时的生活更轻松. 提示1:将任务与Mojo分开 最初,您将把moj ...

  4. 我的Dojo中有一个Mojo(如何编写Maven插件)

    我一直忙于在工作中使用Maven的腋窝. 对于很多开发人员,我会听到:"那又怎样." 不同之处在于,我通常在无法直接访问Internet的环境中工作. 因此,当我说我经常使用Mav ...

  5. 编写Maven插件的提示

    最近,我花了很多时间来编写或为Maven开发插件. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使他们在编写时变得更轻松. 提示1:将任务与Mojo分开 最初,您将把mojo的所有代码放入mojo ...

  6. maven 插件之 AutoConfig 工具使用笔记

    AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用.在我们的工作中,会将自己写的代码打成 jar 包或者 war 包发布到各种环境上.一般地,不用的环境所使用的数据库. ...

  7. 常用Maven插件介绍(上)

    转自 : http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务, ...

  8. 初探maven插件机制

    初探maven插件机制 第一部分 Plexus 本质上说,Maven是一个plugin的框架,所以需要有一个管理者来管理这些plugin.Maven选择了Plexus作为plugin的管理者.作为初探 ...

  9. Maven实战——常用Maven插件介绍

    http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任 ...

最新文章

  1. windows mongodb 安装
  2. JAVA共有几种窗体布局方式_在Java GUI程序开发中常见的三种布局管理器是什么
  3. [学习笔记]电磁场与电磁波
  4. jvm性能调优 - 22JVM GC回顾
  5. ubuntu服务器启动过程中重启卡死的问题解决办法
  6. 设计一个笔记本电脑类,属性随意,并且进行属性私有化,对外提供公开的set和get方法。 设计一个可插拔的接口:InsertDrawable,该接口有什么方法自行定义。
  7. 【图像处理-直方图】
  8. Linux下文件内容查阅命令
  9. Typescript 类型的常用知识与技能
  10. 基于SSM的猫头鹰在线影院订票网站
  11. 微信小程序网络请求封装
  12. Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
  13. lisp怎么改成vlx_如何用CAD自带的VLisp修改Lisp文件并且生成vlx文件??
  14. 利用MapGis6.7 对 jpg图像文件进行图形校准
  15. 条码软件如何将标签文件输出为PDF文档
  16. 【01】分别使用头插法和尾插法建立单链表
  17. 麦吉尔大学的数学与计算机科学,麦吉尔大学数学与计算机科学本科.pdf
  18. Unity - 使用Winform制作简易登录器
  19. LINUX新手入门及安装配置FAQ(http://bbs.blueidea.com/viewthread.php?tid=635906amp;page=)
  20. YOLOv5~目标检测模型精确度

热门文章

  1. 防止 SQL 注入的 PHP MySQLi 准备语句教程
  2. 「3D建模」用ZBrush制作兔子模型教程
  3. 从Linux服务器下载文件和文件夹到本地命令
  4. 黑客白话: 客厅的路由器 会出卖你
  5. OSChina 周一乱弹 —— 编程从娃娃抓起,你怕了吗?
  6. 苹果手机可以分屏吗_苹果手机可以边打电话边录音吗
  7. 6-4 多线程编程:使用多线程同步与通信,模拟实现售票系统的售票和退票过程。 (20 分)
  8. Unity 中 2D 人物多段跳的简单实现
  9. 王者微信去什么服务器好,王者荣耀2021微信区和QQ区哪个更加简单?上分的话哪个更轻松?...
  10. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)