如何开发一个maven插件 (2)

如何开发一个maven插件

 

 

其实就是简单地打印了一句话。

 

我们也可以在项目下执行(由于我们的项目名符合XXX-maven-plugin规范,所以可以省略maven-plugin):

mvn demo:hello

 

也可以得到同样的效果。

 

如何开发一个maven插件

 

 

完整的命令格式为:

mvn groupId:artifactId:version:goal

 

即:

 

如何开发一个maven插件

 

 

 

【Mojo配置方式】

Mojo的配置有两种方式:

一种是JavaDoc + Tag,即上面的示例代码所使用的方式。

另一种是注解,使用@Mojo, @Parameter等annotation来配置。

下面简单解释一下各个标记的含义:

@goal<name>

 

自定义 Maven 插件 Mojo 代码中唯一必须声明的标记,用来声明该 Mojo 的目标名称。

 

@phase<name>

 

默认将该目标绑定到 default 生命周期的某个阶段。
这样在配置使用该插件目标时就可以不声明 phase。

 

@requiresDependecyResolution<scope>

 

声明运行该 Mojo 之前必须解析哪些范围的依赖。

 

@requiresProject<true/false>

 

声明该目标是不是必须在一个 Maven 项目中运行,默认值是true。

 

@requiresDirectInvoction<true/false>

 

声明该目标是否只能使用命令行调用,默认值是 false,既可以在命令行中调用,也可以在 pom 中配置绑定生命周期阶段。

 

@requiresOnline<true/false>

 

声明 Maven 是不是必须是在线状态,默认值是 false。

 

@requiresReport<true/false>

 

声明是否要求项目报告已经生成,默认值是 false。

 

@aggregator

 

在多模块的 Maven 项目中,声明该目标是否只在顶层模块构建的时候执行。

 

@execute goal="<goal>"

 

声明执行该目标之前,先执行指定的目标。

如果该目标是自己插件的另外一个目标,直接 goal="目标名"。

如果该目标是另外一个插件的目标,就需要写成 goal="目标前缀:目标名"。

 

@execute phase="<phase>"

 

声明在执行该目标之前,Maven 先运行到当前生命周期的指定阶段。

 

@execute lifecycle="<lifecycle>"phase="<phase>"

 

声明在执行该目标之前,Maven 运行到指定生命周期的指定阶段。

 

 

【使用注解开发Mojo】

首先添加依赖:

<dependency>

    <groupId>org.apache.maven.plugin-tools</groupId>

    <artifactId>maven-plugin-annotations</artifactId>

    <version>3.6.0</version>

</dependency>

 

需要指定maven-plugin-plugin的版本,否则有可能因为默认的maven-plugin-plugin版本过低,导致不能识别注解:

<build>

    <plugins>

        <!-- 指定maven-plugin-plugin版本,默认版本过低,可能无法识别注解 -->

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-plugin-plugin</artifactId>

            <version>3.6.0</version>

        </plugin>

    </plugins>

</build>

 

 

然后创建新的类,继承AbstractMojo,使用注解,如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyygj.html