自定义 Maven 插件:在一次构建中安装并执行插件

Pet*_*der 5 java maven-plugin maven

我编写了一个自定义 Maven 插件,可以从自定义模式构建 Java 代码。

项目结构是这样的:

Project
+ plugin
+ web-application
Run Code Online (Sandbox Code Playgroud)

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

通常的 mvn 命令是:

mvn
Run Code Online (Sandbox Code Playgroud)

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

在新机器上,构建失败,因为在 Reactor 计划构建阶段时插件尚不可知。所以我得mvn install先打电话。然后mvn plugin:scaffold package就像魅力一样发挥作用。

问题是:每当我修改脚手架插件并调用mvn plugin:scaffold package脚手架插件的修改时,尚未使用它,因为它尚未安装到存储库中。所以我得mvn install先再打电话。

有没有办法:

  1. 安装对插件的修改
  2. 使用插件的修改构建网络应用程序

一步到位?

Fra*_*man 5

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

<modules>
    <module>plugin</module>
    <module>app</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

mvn package
Run Code Online (Sandbox Code Playgroud)

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

[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello, world.
[INFO] 
Run Code Online (Sandbox Code Playgroud)

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

mvn package
Run Code Online (Sandbox Code Playgroud)

你会看到变化:

[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello, worldxxxx.
[INFO] 
Run Code Online (Sandbox Code Playgroud)

在Github上查看完整示例