Maven-自定义插件

Maven自定义插件


一、背景

Maven是由一系列用于执行构建任务的插件和一个负责项目处理和构建的核心引擎组成。Maven提供了很多插件,如果现有插件无法满足需求,可以根据特定需求自定义开发插件。

二、命名规范

插件的groupId没有特别约定,插件的artifactId需要符合一定命名规范。

Maven的官方插件artifactId格式为maven-prefix -plugin,非maven官方开发的插件artifactId格式为prefix-maven-plugin。

三、插件开发

每个Mojo是maven插件的一个goal,多个goal会组成一个Maven插件,自定义插件就是开发Mojo工程。Mojo工程中packaging需要定义成maven-plugin类型。

javascript 复制代码
package sample.plugin;
 
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
 
/**
 * Says "Hi" to the user.
 *
 */
@Mojo(name = "sayhi")
public class GreetingMojo extends AbstractMojo
{
    public void execute() throws MojoExecutionException
    {
        getLog().info("Hello, world.");
    }
}

四、执行插件

1.执行插件

将插件添加到项目的pom的plugin依赖中,然后可以通过maven命令行来执行插件。

javascript 复制代码
<project>
...
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>sample.plugin</groupId>
          <artifactId>hello-maven-plugin</artifactId>
          <version>1.0-SNAPSHOT</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
...
</project>

命令格式如下:

javascript 复制代码
mvn groupId:artifactId:version:goal

例如如果要执行以上插件就需要执行 mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi。

2.简化命令行

2.1 命令格式为 mvn groupId:artifactId:goal

此时会执行本地代码库插件的最新版本。以上命令可以简化为mvn sample.plugin:hello-maven-plugin:sayhi

2.2 命令格式为 mvn ${prefix}:goal

此时maven框架会将 p r e f i x 自动映射成 {prefix}自动映射成 prefix自动映射成{prefix}-maven-plugin(或者maven-${prefix}-plugin),同时需要在setting文件中pluginGroups加入sample.plugin。以上命令可以简化为mvn hello:sayhi。

javascript 复制代码
<pluginGroups>
  <pluginGroup>sample.plugin</pluginGroup>
</pluginGroups>

五、构建周期执行插件

如果想在构建周期过程中需要执行自定义插件,则需要通过配置进行关联。配置如下,这样当构建生命周期执行到compile阶段时,maven会执行自定义插件的goal中sayhi的功能。

javascript 复制代码
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>sample.plugin</groupId>
          <artifactId>hello-maven-plugin</artifactId>
          <version>1.0-SNAPSHOT</version>
        </plugin>
      </plugins>
    </pluginManagement>  
    <plugins>
      <plugin>
        <groupId>sample.plugin</groupId>
        <artifactId>hello-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>sayhi</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

总结

主要介绍Maven自定义插件开发、通过命令行执行maven自定义插件、并且将自定义插件与构建周期进行绑定。


参考链接:

1.Maven插件开发

相关推荐
步行cgn4 分钟前
Spring MVC 执行流程详解:一次请求的完整旅程
java·spring·mvc
增量星球10 分钟前
Spring AI 2.0 Tool Calling 到底怎么跑起来的:从 @Tool 到两次模型调用
java·agent·springai·ai coding
步行cgn14 分钟前
Spring MVC 九大核心角色详解:请求处理链路中的每一个关键组件
java·spring·mvc
智恒百亿20 分钟前
一台 5090 八卡服务器怎么分给一个团队用?多模型多任务的显存分配实战
java·大数据·人工智能
瑞码空间43 分钟前
面向接口编程与开闭原则在模拟 JDBC 驱动中的应用
java·jdbc
Félix2511 小时前
Nacos学习笔记(SpringBoot/SpringCloud)
java·spring boot·spring
文丑颜不良啊1 小时前
LeetCode1581~1600题目解析
java·leetcode
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(06)
java·数据库·mysql·博客·实习
lqbzlll1 小时前
Spring Boot 开启虚拟线程后接口反而变慢了?4 个排查方向和对应修法
java·spring boot·后端
七夜zippoe1 小时前
LangChain4j vs Spring AI:Java AI 框架怎么选(对比表)
java·人工智能·spring·ai·langchain4j