Maven(二)自定义插件

1. provide

插件提供者 项目结构

├── 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

 maven-plugin

1.2. 修改pom


    org.apache.maven
    maven-plugin-api
    3.5.0


    org.apache.maven.plugin-tools
    maven-plugin-annotations
    3.5

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

1.3 coding业务逻辑

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

    @Parameter
    private String msg;

    @Parameter
    private List 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包,这就是插件包。

2. consume

插件消费者 : 项目结构

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

2.1 修改pom

<?xml version="1.0" encoding="UTF-8"?>

    4.0.0

    com.fantj
    my-plugin-consume
    0.0.1-SNAPSHOT

    
        
            
                com.fantj
                my-plugin-provide
                0.0.1-SNAPSHOT
                
                    hello plugin
                    
                        one
                        two
                    
                

                
                
                    
                        package
                        
                            fantj
                        
                    
                
            
        
    

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

2.2 如何传递参数给plugin

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

    @Parameter
    private String msg;

    @Parameter
    private List list;

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

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


    hello plugin
    
         one
         two
    

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

执行该插件: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] ------------------------------------------------------------------------
展开阅读全文

页面更新:2024-05-10

标签:插件   赋值   注解   提供者   生命周期   定义   消费者   参数   结构   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top