09编写maven插件

编写maven插件

步骤

  1. 使用archetype创建一个Maven插件项目

    mvn archetype:generate -DarchetypeCatalog=internal

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sunyi1</groupId>
    <artifactId>maven-loc-plugin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>maven-plugin</packaging>

    <name>maven-loc-plugin Maven Plugin</name>

    <!-- FIXME change it to the project's website -->
    <url>http://maven.apache.org</url>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
    <dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.0</version>
    </dependency>
    </dependencies>
    </project>

    注意点:

    1. packaging必须为maven-plugin
    2. 依赖maven-plugin-api,开发插件需要包
  2. 创建CountMojo类:继承AbstractMojo,实现execute()方法,提供@goal标注

  3. 使用@parameter设置可配置参数

标注

  • @goal :唯一必须声明的标注,当用户命令行调用或在pom中配置插件是,需使用该目标名称
  • @phase :默认将该目标绑定至default声明周期的某个阶段,这样在配置使用插件目标时,就无需声明phase,如maven-surefire-plugin的test目标带有@phase tes标注
  • @requiresDependencyResolution :在运行mojo之前必须解析所有指定范围的依赖,如maven-surefire-plugin的test目标带有requiresDependencyResolution test标注,表示执行测试前,所有测试范围的依赖必须得到解析
  • @requiresProject <true/false>:该目标是否必须在一个maven项目中运行(如测试插件用于测试其他项目),默认为true。大部分插件目标需依赖一个项目才能运行,但是,maven-help-plugin的system目标例外,它用来显示系统属性和环境变量信息,无需实际项目。
  • @requiresOnline <true/false>:是否要求maven必须是在线状态,默认值为false
  • @requiresReport <true/false>:是否要求项目报告已经生成,默认为false
  • @aggregator :当mojo在多模块项目上运行时,该标注表示目标只会在顶层模块运行。
  • @requiresDirectInvocation <true/false>:为true时,该目标就只能通过命令行直接调用。默认为false
  • @execute goal=”“:在运行该目标之前,让maven运行另外一个目标。如果是本插件目标,则直接调用目标名称,否则,使用“prefix:goal”
  • @execute phase=”“:在运行该目标前,让maven先运行一个并行的生命周期,到指定的阶段为止。到phase执行完,才执行插件目标
  • @execute lifecycle=”“ phase = ““:在运行该目标前,让maven先运行一个自定义的生命周期,到指定的阶段为止。

错误处理和日志

  1. 提供MojoExecutionException 和 MojoFailureException 两类异常
  2. 提供getLog()方法,获得Log对象,支持四种级别的日志:debug,info,warn,requiresReport

插件测试

使用maven-invoker-plugin进行测试

本文标题:09编写maven插件

文章作者:Sun

发布时间:2020年01月16日 - 15:01

最后更新:2020年01月16日 - 16:01

原始链接:https://sunyi720.github.io/2020/01/16/Maven/09编写maven插件/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。