之前虽然一直知道maven插件是可以自定义的,不过一致没有用过。最近接触到了swagger项目中的codegen自动生成代码的功能,并且在codegen源码中,也是存在maven插件功能的,所以自己就尝试着自定义一个maven插件。并且从网上搜了一些资料自己写了一个demo。防止自己忘记,所以记录下来,哈哈哈!

  • maven插件工程

新建一个maven工程,名字为maven-plugin-demo1

这里注意的是,打包方式packaging为maven-plugin。

下面是我的maven的pom文件

<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>site.wangxin520</groupId>
 <artifactId>maven-plugin-demo1</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <build>
<!-- 这里注意的是,需要引用一个maven的plugin-plugin插件,并且配置好execution,这个是必须要有的,不然没用 -->
  <plugins>
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-plugin-plugin</artifactId>
  <version>3.2</version>
  <executions>
  <execution>
  <goals>
  <goal>descriptor</goal>
  </goals>
  <phase>generate-resources</phase>
  </execution>
  </executions>
  </plugin>
  </plugins>
<!-- 这里是用来防止eclipes报错的 -->
  <pluginManagement>
  <plugins>
  <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
  <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>
  </goals>
  </pluginExecutionFilter>
  <action>
  <ignore></ignore>
  </action>
  </pluginExecution>
  </pluginExecutions>
  </lifecycleMappingMetadata>
  </configuration>
  </plugin>
  </plugins>
  </pluginManagement>
 </build>
 <!-- 注意打包方式 -->
 <packaging>maven-plugin</packaging> <!-- 需要添加依赖,一个注解用的,一个是api用的 -->
 <dependencies>
  <dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.2</version>
  </dependency>
  <dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>3.3.9</version>
  </dependency>
 </dependencies>
</project>

当配置好maven的pom文件后,下面就开始编写一个自定义的插件java类。

这里需要注意的是该自定义插件类,需要继承AbstractMojo.java,然后实现其中的execute方法

package site.wangxin520.maven.plugin.demo.test1;

import java.util.List;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter; /**
*
* @author 王鑫
*
*         该类就是maven自定义插件类
*
*/
// mojo注解就是maven插件的注解,具体什么我忘记了。name就是后面使用该插件的时候excuation里面的,后面配置的是生命周期,我这里配置了install,即默认是安装时候执行本插件
@Mojo(name = "mojoDemo1", defaultPhase = LifecyclePhase.INSTALL)
public class MojoDemo1 extends AbstractMojo { // 配置的是本maven插件的配置,在pom使用configration标签进行配置 property就是名字,在配置里面的标签名字。在调用该插件的时候会看到
@Parameter(property = "name")
private String name; @Parameter(property = "modules")
private List<String> modules;
// 执行的相关代码,即插件执行的语句。
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("!!!!!!!!!!!!!!!!!!!!"); System.out.println(name); System.out.println("~~~~~~~~~~~~~~~~~~~~"); System.out.println(modules); for (String string : modules) {
System.out.println(string);
} System.out.println("!!!!!!!!!!!!!!!!!!!!");
} }

当着一切都弄好后,就执行maven install,将本插件安装到本地的maven仓库中。方便后面调用。

这里需要注意一下,maven插件的配置参数什么的,可以在maven官网看到。这里就不多做赘述了,后面我会加上连接。

  • maven插件测试工程

创建maven工程maven-plugin-test

为了方便后面使用,我弄成了组合工程,其中有两个模块。

<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>site.wangxin520</groupId>
<artifactId>maven-plugin-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>maven-plugin-part1</module>
<module>maven-plugin-part2</module>
</modules>
<!-- 配置插件 -->
<build>
<plugins>
<plugin>
<!-- 这里写刚刚创建的maven插件的groupid和artifactid -->
<groupId>site.wangxin520</groupId>
<artifactId>maven-plugin-demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<executions>
<execution>
   <!-- goals里面配置的就是刚刚在@mojo里面的name -->
<goals>
<goal>mojoDemo1</goal>
</goals>
<!-- 这里加入的是相关参数 -->
<configuration>
<name>wangxin</name>
<modules>${project.modules}</modules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

上面就是添加插件的配置。

下面就进行安装了。就可以执行自定义maven配置中的excute方法

以上就是maven自定义插件的配置和方法。是不是很简单!

转载自Nixgnaw:www.wangxin520.site

自定义maven插件的更多相关文章

  1. 面试官:开发过Maven插件吗?我:开发过啊。。。

    写在前面 转眼间,今天已经是假期的第4天了.今天要给大家分享点啥呢?想了半天,想起了之前去某宝面试的情景.记得面试前自己基于Maven开发过一些简单实用的插件,而且在自己的本地环境中一直在使用,极大的 ...

  2. 如何开发一个maven插件

    maven是当下最流行的项目管理工具,其丰富的插件为我们的工作带来了很大的便利. 但是在一些情况下,开源的插件并不能完全满足我们的需求,我们需要自己创建插件,本文就从0开始带大家一起创建自己的插件. ...

  3. eclipse安装svn和maven插件以及m2e-extras

    相关介绍: 1.SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Su ...

  4. 常用Maven插件介绍

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  5. 学习笔记——Maven实战(七)常用Maven插件介绍(上)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...

  6. Maven-在eclipse中安装Maven插件

    装IDE Plugins的方法有很多. 其一:在线安装 通过Help-->Install New Software的方式,输入HTTP地址来安装,简单易操作,但是也优缺点,就是下载速度慢,或者有 ...

  7. 【转载】常用Maven插件介绍

    http://www.cnblogs.com/crazy-fox/archive/2012/02/09/2343722.html 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构 ...

  8. eclipse下maven插件的安装

    最近公司项目要求使用maven来进行项目的管理开发,在这里记录一下eclipse下maven插件的安装. maven插件在eclipse下安装害得我挺恼火的. 我想用最简单的那种方式--在线安装: 通 ...

  9. 【转】常用Maven插件

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

随机推荐

  1. 【GIS】ArcGIS Server密码

    1.C:\Program Files\ArcGIS\Server\tools\passwordreset 2.PasswordReset -l 列出管理站点的管理员用户的名称 3.PasswordRe ...

  2. CharacterMotor_刚体角色驱动

    using UnityEngine; //this class holds movement functions for a rigidbody character such as player, e ...

  3. BugHD 与你的应用一起成长

    BugHD 新增功能 1.新增安装量.启动量的统计功能 BugHD SDK 1.3.0新增安装量.启动量的统计功能,在崩溃分析页面右上角可看到安装量和启动量. BugHD 体验优化 1.Android ...

  4. ANDROID – TOOLBAR STEP BY STEP(转)

    今年(2014) 的 Google I/O 發表令多數人為之一亮的 Material Design,而 Google 也從「Google I/O 2014」 開始,大家也陸陸續續地看到其更新的 And ...

  5. pace.js简介

    Pace.js – 超赞的页面加载进度自动指示和 Ajax 导航效果 在页面中引入 Pace.js 和您所选择主题的 CSS 文件,就可以让你的页面拥有漂亮的加载进度和 Ajax 导航效果.不需要挂接 ...

  6. Esper学习之三:进程模型

    之前对Esper所能处理的事件结构进行了概述,并结合了例子进行讲解,不清楚的同学请看Esper学习之二:事件类型.今天主要为大家解释一下Esper是怎么处理事件的,即Esper的进程模型. 1.Upd ...

  7. 告知你不为人知的UDP-疑难杂症和使用

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/848077001486437077 来源:腾云阁 h ...

  8. sencha touch Container 监听超链接插件

    有时候内容直接从后台获取,有可能包含超链接,打包成应用之后,点击会造成不好的后果,这样做能够用外部浏览器打开.需要Cordova支持 监听插件代码: /* *监听a标签,用外部浏览器打开链接 */ E ...

  9. [原]Failed to load SELinux policy. System Freezing ----redhat7or CentOS7 bug

    重启rhel7或者centos7 启动界面按 e 在启动项后面加上enforcing=0 Ctrl+x  运行修改后的grub 进入系统 编辑保存/etc/selinux/config 重启

  10. psr-4

    自动加载: <?php function autoload($className) { $className = ltrim($className, '\\'); $fileName = ''; ...