当前位置:首页 > 科技  > 软件

怎么写一个Maven插件来提升生产效率?

来源: 责编: 时间:2023-12-13 17:02:52 423观看
导读Maven 插件如果你的项目是基于maven构建,那么在项目的pom文件中,经常会看到这样的配置<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-c

Maven 插件

如果你的项目是基于maven构建,那么在项目的pom文件中,经常会看到这样的配置wWy28资讯网——每日最新资讯28at.com

<build>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <version>3.8.1</version>            <configuration>                <source>1.8</source>                <target>1.8</target>                <encoding>UTF-8</encoding>            </configuration>        </plugin>    </plugins></build>

在上面的代码中,我们使用了插件maven-compiler-plugin,这个插件的作用是将编写的java代码编译成指定的版本与编码的class文件。wWy28资讯网——每日最新资讯28at.com

Maven插件的组成

  • goal

maven中的插件是有很多目标(goal)组成的,开发插件,实际上就是去编写插件中目标的具体代码。每个目标对应一个java类,这个类在maven中叫做MOJO,maven提供了一个Mojo的接口,我们开发插件也就是去实现这个接口wWy28资讯网——每日最新资讯28at.com

org.apache.maven.plugin.Mojo

通过goal我们可以定义插件在maven哪个生命周期中执行,比如上面的maven-compiler-plugin在compile阶段执行。wWy28资讯网——每日最新资讯28at.com

  • configuration

插件执行阶段,我们可以通过配置定义各种参数,这样就能根据不同参数按需求执行插件,比如上面的maven-compiler-plugin中,在configuration 下的配置wWy28资讯网——每日最新资讯28at.com

<configuration>    <source>1.8</source>    <target>1.8</target>    <encoding>UTF-8</encoding></configuration>

maven-compiler-plugin的配置信息中,source和target属性指定了编译的java版本,encoding属性指定了编译结果的编码。wWy28资讯网——每日最新资讯28at.com

Maven插件的分类

Maven插件分为两种:wWy28资讯网——每日最新资讯28at.com

  • 核心插件:Maven自带的插件,如maven-compiler-plugin,maven-surefire-plugin等。
  • 非核心插件:第三方开发的插件,如sonar-maven-plugin,pmd-maven-plugin等。

插件的生命周期

Maven插件的生命周期分为三个阶段:wWy28资讯网——每日最新资讯28at.com

  • 初始化阶段:在这个阶段,Maven会将插件的配置信息加载到一个org.apache.maven.plugin.Plugin对象中,这个对象中包含了插件的配置信息,如插件的id,version,dependencies等。
  • 执行阶段:在这个阶段,Maven会调用插件的execute()方法,这个方法就是插件的核心,这个方法的执行是有顺序的,先执行initialize()方法,然后执行execute()方法
  • 销毁阶段:在这个阶段,Maven会调用插件的cleanup()方法,这个方法的执行是无顺序的,先执行execute()方法,然后执行cleanup()方法。

Maven插件的执行

Maven插件的执行分为两种:wWy28资讯网——每日最新资讯28at.com

  • 手动执行:在命令行中,使用mvn插件的id,如mvn compiler:compile,这个命令会先执行插件的初始化阶段,然后执行插件的执行阶段,最后执行插件的销毁阶段。
  • 自动执行:在pom.xml文件中配置插件的执行,如maven-compiler-plugin,这个配置会先执行插件的初始化阶段,然后执行插件的执行阶段,最后执行插件的销销毁阶段。

比如基于idea时,我们可以在Maven工具栏,通过Lifecycle菜单中,选择相应的生命周期函数,然后点击Run按钮,即可执行插件。比如插件配置的在compile阶段执行,那么配置在compile对应的goal都会触发。wWy28资讯网——每日最新资讯28at.com

同样我们可以直接通过mvn命令调用插件,这样插件就不需要依赖于maven的生命周期函数取执行了。wWy28资讯网——每日最新资讯28at.com

// mvn groupId:artifactId:goal -Dprop=valuemvn com.sucls.blog:build-maven-plugin:printDate -Dname=XX

如何写一个Maven插件?wWy28资讯网——每日最新资讯28at.com

下面通过一个简单的示例来演示如何写一个Maven插件。wWy28资讯网——每日最新资讯28at.com

  1. 创建一个maven项目
  2. 添加相关依赖
<dependencies>        <dependency>            <groupId>org.apache.maven</groupId>            <artifactId>maven-plugin-api</artifactId>            <version>${maven-plugin-api.version}</version>        </dependency>        <dependency>            <groupId>org.apache.maven.plugin-tools</groupId>            <artifactId>maven-plugin-annotations</artifactId>            <version>${maven-plugin-annotations.version}</version>            <scope>provided</scope>        </dependency>    </dependencies>
  1. 编写插件代码
@Mojo(name = "printDate")public class PrintDatePlugin extends AbstractMojo {    @Parameter(property = "name",defaultValue = "printDate")    private String name;    @Parameter(property = "description",defaultValue = "打印日期插件")    private String description;    @Parameter(property = "format",defaultValue = "yyyy-MM-dd HH:mm:ss")    private String format;    @Override    public void execute() throws MojoExecutionException, MojoFailureException {        Date date = new Date();        Log log = getLog();        log.info(StringUtils.repeat("=",20));        log.info(String.format("开始执行插件:%s", name));        log.info(String.format("插件信息:%s", description));        log.info(String.format("执行插件:%s", DateFormatUtils.format(date,format)));        log.info(StringUtils.repeat("=",20));    }}
  1. 打包插件
// 执行下面的命令 或者通过 idea中maven工具栏的package直接打包mvn clean package
  1. 使用插件 创建一个新的项目,在pom.xml中添加插件的配置信息
<build>    <plugins>      <plugin>        <groupId>com.sucls.blog</groupId>        <artifactId>build-maven-plugin</artifactId>        <version>${project.version}</version>        <executions>          <execution>            <id>print-date</id>            <phase>compile</phase>            <goals>              <goal>printDate</goal>            </goals>            <configuration>              <name>PD</name>              <format>yyyy-MM-dd</format>            </configuration>          </execution>        </executions>      </plugin>    </plugins>  </build>
  1. 执行插件
mvn clean complie

观察控制台可以看到这样的信息:wWy28资讯网——每日最新资讯28at.com

[INFO] --- build-maven-plugin:1.0-SNAPSHOT:printDate (print-date) @ build-maven-plugin ---[INFO] [INFO] ===============[INFO] 开始执行插件:PD[INFO] 插件信息:打印日期插件[INFO] 执行插件:2023-12-05[INFO] ===============

上面的示例中,主要做了下面的事情:wWy28资讯网——每日最新资讯28at.com

  1. 定义了一个打印日期的插件 也就是一个maven项目
  2. 为插件定义goal 一个goal也就是一个org.apache.maven.plugin.Mojo类,通过@Mojo注解,定义了插件的名称和goal,一个插件中可以包含多个goal,在配置时同样可以对应多个
  3. 为插件添加参数 在每一个Mojo中,通过@Parameter定义插件相关参数,这样在插件执行阶段即可通过参数完成对应逻辑
  4. 在其他项目中引入插件 在pom文件中,像其他插件一样通过groupId:artifactId:version引入自己定义的插件,配置maven的哪个生命周期阶段执行插件的goal,以及插件的参数。
  5. 使用插件 maven生命周期中,各个阶段都会找到所关联的插件并执行。

结束语

通过maven插件,可以根据我们的项目,定义一些重复,但耗时的编码工作,通过插件的形式,可以自动化完成这些工作,从而提高开发效率。wWy28资讯网——每日最新资讯28at.com


wWy28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-44413-0.html怎么写一个Maven插件来提升生产效率?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 让 Java 程序运行更快的 15 个技巧,肯定有你不知道的

下一篇: 手把手教你IDEA进行远程Debug调试的来龙去脉

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
Top