Maven 自定义插件

栏目: Java · 发布时间: 5年前

内容简介:插件提供者 项目结构这两个依赖是自定义插件必须的依赖,代表了它是一个Mojo工程,里面包含了一些Mojo的接口和抽象类以及注解。注意这里面的

插件提供者 项目结构

├── pom.xml
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── fantj
│       │           └── mypluginprovide
│       │               └── MyMojo.java
│       └── resources
│           └── application.properties
└── target
    │  
    └── my-plugin-provide-0.0.1-SNAPSHOT.jar

复制代码

1.1 修改packaging

<packaging>maven-plugin</packaging>
复制代码

1.2. 修改pom

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5</version>
</dependency>
复制代码

这两个依赖是自定义插件必须的依赖,代表了它是一个Mojo工程,里面包含了一些Mojo的接口和抽象类以及注解。

1.3 coding业务逻辑

@Mojo(name = "fantj",defaultPhase = LifecyclePhase.PACKAGE)
public class MyMojo extends AbstractMojo {

    @Parameter
    private String msg;

    @Parameter
    private List<String> list;

    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("hello plugin: "+msg + "list: "+ list);
    }
}
复制代码

注意这里面的 @Parameter``@Mojo`` LifecyclePhase.PACKAGE 都是 org.apache.maven.plugins.annotations 包下的:

import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
复制代码

@Parameter 注解会获取消费者配置文件中的变量值并赋值。

defaultPhase = LifecyclePhase.PACKAGE 声明了该插件触发的生命周期。

@Mojo 定义插件的 goal 名字。

1.3. clean and install

执行 mvn clean install ,在target目录下会生成这样一个jar包,这就是插件包。

Maven 自定义插件

2. consume

插件消费者 : 项目结构

├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── fantj
        │           └── mypluginuse
        └── resources
            └── application.properties
复制代码

2.1 修改pom

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fantj</groupId>
    <artifactId>my-plugin-consume</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>com.fantj</groupId>
                <artifactId>my-plugin-provide</artifactId>
                <version>0.0.1-SNAPSHOT</version>
                <configuration>
                    <msg>hello plugin</msg>
                    <list>
                        <list>one</list>
                        <list>two</list>
                    </list>
                </configuration>

                <!--在执行package时候自动执行自定义插件 将插件挂到 phase 中 -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>fantj</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
复制代码

如果不加 <executions> ,我们只能通过执行插件或者执行命令的方式来执行,如果想让它在执行 package 的时候自动执行,就需要设置该属性,可以把它理解成hook。

2.2 如何传递参数给plugin

在插件提供者中,有个 MyMojo 的类,有这样一段代码:

@Parameter
    private String msg;

    @Parameter
    private List<String> list;
复制代码

它和你用过的spring注解一样,也是用来以注解的形式获取参数的值。

相对应的,在插件消费者的配置中我们就应该相应的给出参数的定义:

<configuration>
    <msg>hello plugin</msg>
    <list>
         <list>one</list>
         <list>two</list>
    </list>
</configuration>
复制代码

上面的配置与变量名一一对应即可。这时候你会发现maven插件中自动会添加一个 plugins 选项:

Maven 自定义插件

执行该插件: mvn myprovide:fantj 或者直接点击

[fantj@lalala my-plugin-consume]$ mvn myprovide:fantj
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------< com.fantj:my-plugin-consume >---------------------
[INFO] Building my-plugin-consume 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- my-plugin-provide:0.0.1-SNAPSHOT:fantj (default-cli) @ my-plugin-consume ---
hello plugin: hello pluginlist: [one, two]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.347 s
[INFO] Finished at: 2018-11-01T19:59:04+08:00
[INFO] ------------------------------------------------------------------------
复制代码

如果你喜欢我的文章,那麻烦请关注我的公众号,公众号重点分析架构师技术,该公众号还处于初始阶段,谢谢大家的支持。

Maven 自定义插件
关注公众号,回复 java架构

获取架构视频资源(后期还会分享不同的优质资源噢)。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

水平营销

水平营销

[美] 菲利普·科特勒、费尔南多・德・巴斯 / 陈燕茹 / 中信出版社 / 2005-1 / 25.00元

《水平营销》阐明了相对纵向营销而言的的水平营销的框架和理论。引入横向思维来作为发现新的营销创意的又一平台,旨在获得消费者不可能向营销研究人员要求或建议的点子。而这些点子将帮助企业在产品愈加同质和超竞争的市场中立于不败之地。 《水平营销》提到: 是什么创新过程导致加油站里开起了超市? 是什么创新过程导致取代外卖比萨服务的冷冻比萨的亮相? 是什么创新过程导致巧克力糖里冒出了玩具......一起来看看 《水平营销》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具