Maven自定义插件

2019-02-21  本文已影响0人  zxbking

0、创建项目

创建一个空的maven项目。申明项目类型为maven组件。

<packaging>maven-plugin</packaging>

增加依赖

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.5.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

设置项目build配置

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

1、组件命名

插件命名为 <myplugin>-maven-plugin。其中myplugin就是你的组件名称。比如这个demo项目的插件名称就是demo-maven-plugin

不要使用maven-<myplugin>-plugin,因为该命名是 Maven 团队维护官方插件的保留命名方式,使用这个命名方式会侵犯 Apache Maven 商标。

2、自定义组件实现类

Mojo 就是 Maven plain Old Java Object。每一个 Mojo 就是 Maven 中的一个执行目标(executable goal),而插件则是对单个或多个相关的 Mojo 做统一分发。一个 Mojo 包含一个简单的 Java 类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。

继承AbstractMojo,编写自己的组件执行代码。

如DemoMojo,定义计算求和的组件,定义num1,num2,记得需要设置get,set方法。

package com.zxbking.plugin;

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;

/**
 * Created by zhangxb on 2019/2/21.
 */
@Mojo(name = "sumplugin", defaultPhase = LifecyclePhase.PACKAGE)
public class DemoMojo extends AbstractMojo {
    @Parameter
    private int num1;
    @Parameter
    private int num2;
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("num1 = " +num1 );
        System.out.println("num2 = " +num2 );
        System.out.println("sum = "+(num1+num2) );
    }


    public int getNum1() {
        return num1;
    }

    public void setNum1(int num1) {
        this.num1 = num1;
    }

    public int getNum2() {
        return num2;
    }

    public void setNum2(int num2) {
        this.num2 = num2;
    }
}

3、发布组件

完成mojo类进行编辑后,执行mvn clean install添加到本地库。或者发布到远程库。

4、引入组件

在需要使用这个组件的项目的pom文件中,增加一下代码

<build>
        <plugins>
            <plugin>
                <groupId>com.zxbking.plugin</groupId>
                <artifactId>demo-maven-plugin</artifactId>
                <version>1.0-SNAPSHOT</version>
                <configuration>
                    <num1>10</num1>
                    <num2>20</num2>
                </configuration>
            </plugin>
        <plugins>
<build>

5、运行组件

使用命令启动

mvn com.zxbking.plugin:demo-maven-plugin:1.0-SNAPSHOT:sumplugin

同个项目里面,组件可以直接使用mvn demo:sunplugin启动运行。不同项目则需要对应的maven库里面存在。

使用idea工具启动,双击启动

image

6、注意事项

如果设置的组件参数没有设置get/set方法,在配置pom里面会存在找不到参数的问题。

7、代码地址

https://github.com/zxbking/demo-maven-plugin

上一篇下一篇

猜你喜欢

热点阅读