自定义maven插件

maven插件简介

       一般的maven插件使用时需要引入插件的gav(groupId,artifactId,version)就可以正常使用了。一般的结构如下:

 包含插件的gav,还有一组可执行器<execution>。在每个<execution>里面包含有如下结构

一个可执行器的结构如上,其中各标签释义如下:

<configuration>表示该可执行器的配置项,后续在自定义实现maven插件中会详细的描述

<id>就是取个名字,别重复就行了

<phase>表示该可执行器在maven的生命周期的哪个阶段生效,如果不配置,使用插件默认的,maven的生命周期如下:

<goals>一组目标,每个<goal>表示一个对应的插件实现类(每个插件实现类都会关联自己的goal)。

当完成如上配置时,mavne在执行到相应的生命周期时,就会调用对应的goal实现类的相关方法完成业务逻辑处理

自定义实现

           新建一个maven工程如下:

        1  修改package

如上图,修改该maven工程的<packaging>标签为:

                      

<packaging>maven-plugin</packaging>

        2 引入依赖

需要引入maven插件的相关依赖:

 <dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>3.5.2</version>
</dependency>

        3  编写代码

创建类继承org.apache.maven.plugin.AbstractMojo实现相关业务逻辑

public class PrintLogMojo extends AbstractMojo {
    
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        Log log = getLog();
        log.info("测试执行自定义插件goal是comment!");
    }
}

在上面讲解maven的结构时有提到关于goal的绑定。goal绑定有2中方式:注释和注解

注释方式:

使用注释的方式绑定goal有的时候会存在问题:比如在类上再添加其他的xxxx的注释时,有可能会把类的注释也绑定上去了,该种方式不推荐

注解方式:

使用注解的方式绑定goal还需要引入一个依赖:

<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5.2</version>
</dependency>

推荐使用该种方式绑定goal

在maven插件逻辑编写时也可以绑定该<execution>执行器的执行参数,如下所示:

import org.apache.commons.io.FileUtils;
import org.apache.maven.model.Build;
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;
import org.apache.maven.project.MavenProject;

import java.io.File;
import java.io.IOException;

/**
 * 移动jar包到指定目录
 */
@Mojo(name = "move",defaultPhase = LifecyclePhase.PACKAGE)
public class MoveMojo extends AbstractMojo {

    @Parameter(defaultValue = "${project}")
    private MavenProject mavenProject;

    @Parameter(required = true)
    private String toAbsolutePath;

    @Parameter(required = false)
    private int age;

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        String packaging = mavenProject.getPackaging();
        Build build = mavenProject.getBuild();
        String finalName = build.getFinalName();

        // 最终打包的绝对路径也就是target文件夹目录
        String directory = build.getDirectory();

        String targetAbsolutePath = directory + File.separator + finalName + "." + packaging;

        try {
            FileUtils.copyFileToDirectory(new File(targetAbsolutePath),new File(toAbsolutePath));
        } catch (IOException e) {
            throw new RuntimeException("拷贝文件异常" + e.getMessage());
        }

    }
}

其中对象MavenProject表示整个maven工程对象的封装,可以从中拿到整个maven工程相关的配置项。其余的配置项是自定义的配置项,在每个<execution>标签均会绑定自己的<configuration>配置项。其中@Parameter注解的required属性表示该配置是否是必须的,如果是true,在使用该插件的该goal时就必须配置,具体使用如下:

        4 打包安装

使用maven的install命令安装该插件到本地(或者公司私服或者公服)上,就可以被其他人使用了

        5 引用实践

安装上述步骤将maven插件打包安装之后,就可以在其他的项目中使用该插件完成相关功能,配置demo如下:

当执行maven项目的package时,就可以在控制台看到自定义插件的日志打印和其他的功能

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义一个 Maven 插件来构建项目的 ZIP 包,你需要遵循以下步骤: 1. 创建一个 Maven 项目:使用 Maven 的 `archetype` 创建一个新的项目,选择适合你需求的 archetype,例如 `maven-archetype-quickstart`。运行以下命令: ``` mvn archetype:generate -DgroupId=com.example -DartifactId=my-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ``` 2. 定义插件的目标:在你的项目中,创建一个新的类来定义插件的目标。这个类应该继承自 `org.apache.maven.plugin.AbstractMojo` 类,并且使用 `@Mojo` 注解来标记它为一个插件目标。在这个类中,你可以编写逻辑来生成 ZIP 包。 ```java import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; @Mojo(name = "package") public class PackageMojo extends AbstractMojo { public void execute() throws MojoExecutionException, MojoFailureException { // 在这里编写生成 ZIP 包的逻辑 } } ``` 3. 配置插件:在项目的 `pom.xml` 文件中,添加插件的配置。在 `<build>` 标签下的 `<plugins>` 标签中,添加以下内容: ```xml <plugin> <groupId>com.example</groupId> <artifactId>my-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>package</goal> </goals> </execution> </executions> </plugin> ``` 注意替换 `<groupId>`、`<artifactId>` 和 `<version>` 为你自己的插件信息。 4. 构建插件:在项目根目录下运行以下命令,来构建插件: ``` mvn clean package ``` 5. 使用插件:在你的项目中,运行以下命令来执行插件的目标,生成 ZIP 包: ``` mvn com.example:my-plugin:1.0.0:package ``` 这会执行插件中的 `execute` 方法,生成你所需的 ZIP 包。 以上就是自定义 Maven 插件来构建项目 ZIP 包的基本过程。你可以根据自己的需求,在插件中添加更多的逻辑和配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值