Exploring
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
  • Docker

  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
      • 简介
      • 第一个插件
        • 依赖
        • 编写mojo
        • 安装到本地仓库
        • 测试插件
      • 参数传递
      • 相关链接
  • Nginx

  • Tomcat

  • Vagrant

  • Linux

  • DevOps
  • Maven
unclezs
2020-12-06
0
目录

Maven之自定义插件

# 简介

Mojo:Maven plain Old Java Object。每一个 Mojo 就是 Maven 中的一个执行目标(executable goal),而插件则是对单个或多个相关的 Mojo 做统一分发。

一个 Mojo 包含一个简单的 Java 类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。Maven插件项目的打包方式packaging必须为maven-plugin

# 第一个插件

# 依赖

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>samples-maven</artifactId>
        <groupId>com.unclezs</groupId>
        <version>1.0</version>
    </parent>
    <packaging>maven-plugin</packaging>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>hello-maven-plugin</artifactId>
    <name>hello-maven-plugin</name>
    <description>我的第一maven插件</description>
    <properties>
        <custom.plugin.version>3.6.0</custom.plugin.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>${custom.plugin.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>plexus-utils</artifactId>
                    <groupId>org.codehaus.plexus</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>${custom.plugin.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>maven-artifact</artifactId>
                    <groupId>org.apache.maven</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-plugin-plugin</artifactId>
                <version>${custom.plugin.version}</version>
                <!--自定义插件前缀 mvn xxx:mojoName,默认为xxx-maven-plugin的xxx-->
                <configuration>
                    <goalPrefix>hello</goalPrefix>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

# 编写mojo

/**
 * @author blog.unclezs.com
 * @date 2020/12/6 2:51 上午
 */
@Mojo(name = "custom")
public class CustomPlugin extends AbstractMojo {
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("hello maven plugin!!!");
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 安装到本地仓库

maven clean install -U
1

# 测试插件

再另个一项目下引入

<build>
    <plugins>
        <plugin>
            <groupId>com.unclezs</groupId>
            <artifactId>hello-maven-plugin</artifactId>
            <version>1.0</version>
            <!--这个如果加上mvn compile的时候自动执行-->
            <executions>
              <execution>
                <phase>compile</phase>
                <goals>
                  <goal>custom</goal>
                </goals>
              </execution>
            </executions>
        </plugin>
    </plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

然后执行

mvn hello:custom
mvn com.unclezs:hello-maven-plugin:1.0:custom
mvn groupId:artifactId:version:goal
1
2
3

# 参数传递

package com.unclezs;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

import java.io.File;
import java.net.URL;
import java.util.*;

/**
 * @author blog.unclezs.com
 * @date 2020/12/6 2:51 上午
 */
@Mojo(name = "param")
public class ParameterPlugin extends AbstractMojo {
    @Parameter(property = "param.name", defaultValue = "${project.artifactId}")
    private String name;
    @Parameter
    private Integer number;
    @Parameter
    private Boolean bool;
    @Parameter
    private Double doubleValue;
    @Parameter
    private Date date;
    @Parameter
    private File file;
    @Parameter
    private URL url;
    @Parameter
    private Color color;
    @Parameter
    private String[] array;
    @Parameter
    private List<String> list;
    @Parameter
    private Map<String, String> map;
    @Parameter
    private Properties properties;
    @Parameter
    private User obj;

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("String:"+name);
        getLog().info("Integer:" + number);
        getLog().info("Boolean:" + bool);
        getLog().info("Double:" + doubleValue);
        getLog().info("Date:" + date);
        getLog().info("File:" + file.getName());
        getLog().info("URL:" + url);
        getLog().info("enum:" + color);
        getLog().info("array:" + Arrays.toString(array));
        getLog().info("List:" + list);
        getLog().info("Map:" + map);
        getLog().info("Properties:" + properties);
        getLog().info("obj:" + obj);

    }

    public enum Color {
        GREEN,
        RED,
        BLUE
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

对应的引用时候传值

<build>
    <plugins>
        <plugin>
            <groupId>com.unclezs</groupId>
            <artifactId>hello-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <name>unclezs</name>
                <number>123</number>
                <bool>true</bool>
                <doubleValue>1.0</doubleValue>
                <date>2005-10-06 2:22:55.1 PM</date>
                <file>${project.basedir}/pom.xml</file>
                <url>https://blog.unclezs.com</url>
                <color>GREEN</color>
                <array>
                    <param>value1</param>
                    <param>value2</param>
                </array>
                <list>
                    <param>value1</param>
                    <param>value2</param>
                </list>
                <map>
                    <key1>value1</key1>
                    <key2>value2</key2>
                </map>
                <properties>
                    <property>
                        <name>propertyName1</name>
                        <value>propertyValue1</value>
                    </property>
                    <property>
                        <name>propertyName2</name>
                        <value>propertyValue2</value>
                    </property>
                </properties>
                <obj>
                    <age>12</age>
                    <name>uncle</name>
                </obj>
            </configuration>
            <!--这个如果加上mvn compile的时候自动执行-->
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

测试输出

更多细节查看plugin-parameters (opens new window)

# 相关链接

  • Plugin Developers Centre (opens new window)
  • 示例代码 (opens new window)
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11
把自己的包到Maven中央仓库
nginx的作用

← 把自己的包到Maven中央仓库 nginx的作用→

Theme by Vdoing | Copyright © 2018-2024 unclezs
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式