问题描述
我编写了一个自定义的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
。
有没有办法:
一步一步完成?
解决方法
首先,您的插件必须是根项目的模块,分辨率才能正常工作:
<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上查看完整示例