自定义maven插件:在一个版本中安装并执行插件

问题描述

我编写了一个自定义的maven插件,该插件可从自定义模式中构建Java代码

项目结构如下:

Project
+ plugin
+ web-application

反应堆先编译插件,然后编译应用程序。

通常的mvn命令为:

mvn

...谁触发了<defaultGoal>plugin:scaffold package</defaultGoal>

在新机器上,构建失败,因为在反应堆计划构建阶段时尚不知道插件。因此,我必须先致电mvn install。然后mvn plugin:scaffold package就像一个吊饰。

问题是:每当我修改脚手架插件调用mvn plugin:scaffold package时,由于尚未将脚手架插件安装到存储库中,因此尚未对其进行修改。所以我必须先打mvn install

有没有办法:

  1. 修改安装到插件
  2. 使用插件修改构建Web应用程序

一步一步完成?

解决方法

首先,您的插件必须是根项目的模块,分辨率才能正常工作:

<modules>
    <module>plugin</module>
    <module>app</module>
</modules>

然后在应用程序pom的build/plugins部分中声明插件

<build>
    <plugins>
        <plugin>
            <groupId>org.example.plugin</groupId>
            <artifactId>plugin</artifactId>
            <version>${project.parent.version}</version>
            <executions>
                <execution>
                    <id>sayhi</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>sayhi</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

第一次运行插件或插件更改时,您至少需要运行package阶段才能创建插件jar。它必须从根项目运行:

mvn package

该插件将在generate-sources阶段执行:

[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello,world.
[INFO] 

当您更改插件时,只需再次运行(从根项目开始):

mvn package

您将看到更改:

[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello,worldxxxx.
[INFO] 

Github上查看完整示例