maven自定义插件笔记


感觉对maven插件不太明白,干脆自定义个,就容易理解其中的机制了。

pom.xml

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>my-maven-plugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>maven-plugin</packaging>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>3.6.3</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.5.2</version>
    </dependency>
  </dependencies>
</project>

注:主要就2个依赖。
maven-plugin-api # 插件核心api
maven-plugin-annotations # 如果要用到注解,添加这个依赖

java类

package com.example;

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

/**
 * @goal hello
 */
@Mojo(name = "hello2") // 这里本来是hello,因为报错,就用hello2了
public class MyMojo extends AbstractMojo {

    /**
     * @parameter
     */
    @Parameter(defaultValue = "World")
    private String name;

    public void execute() throws MojoExecutionException {
        getLog().info("Hello, " + name + "!");
    }
}


执行命令 mvn my-maven-plugin:hello2

报错 [ERROR] No plugin found for prefix ‘my-maven-plugin’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (D:\maven repository), company (http://mvn.ttt.com:8081/nexus/content/groups/public)] -> [Help 1]

命令(感觉这个命令是有问题的):
mvn my-maven-plugin:hello2

那么用全路径试下:
mvn com.example:my-maven-plugin:hello2
发现成功了。

然后idea执行install命令,安装到本地仓库,其他项目就可以使用了。

引用项目的pom.xml配置

在pom.xml中引入该插件(如果找不到就本地引入):

<build>
    <plugins>
      <plugin>
        <groupId>com.example</groupId>
        <artifactId>my-maven-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <goals>
              <goal>hello2</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

idea maven界面点,发现个诡异的现象,应该是my:hello2,但居然是my:greeting(之前尝试的例子),这个包都删了,怎么会还有问题呢?

其他

自定义的插件如何和项目产生交互

这个问题乍看不好答,实际理一下就清楚了。

参数通过@Parameter进行交互。@Parameter对应xml中的标签。
再和生命周期的阶段绑定下就好了。
1、@Mojo的defaultPhase。
2、配置文件中配置,如:

<plugin>
   <groupId>com.example</groupId>
    <artifactId>my-plugin</artifactId>
    <version>1.0.0</version>
    <executions>
        <!-- 在compile阶段执行插件的goal-1目标 -->
        <execution>
            <id>execution-1</id>
            <phase>compile</phase>
            <goals>
                <goal>goal-1</goal>
            </goals>
        </execution>
        <!-- 在install阶段执行插件的goal-2和goal-3目标 -->
        <execution>
            <id>execution-2</id>
            <phase>install</phase>
            <goals>
                <goal>goal-2</goal>
                <goal>goal-3</goal>
            </goals>
        </execution>
    </executions>
</plugin>

mojo是什么意思

魔法、魔力 感觉这个命名还挺科学的。

如何看插件有几个功能

一般就很少的几个类。如果确实想看,到maven仓库对应的jar包解压下即可。

maven插件如何调试

1、命令来调试。如:mvn com.example:my-maven-plugin:hello2
2、main方法运行报错。
错误: 找不到或无法加载主类 com.example.MyMojo。 先略过。

还有个问题,执行命令时如何传递自定义参数?
mvn com.example:my-maven-plugin:hello2 -Dname=“java”

如何设置maven下载超时时间(连接时间)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值