Java 自定义maven插件:在一个版本中安装并执行插件
我编写了一个自定义maven插件,它从自定义模式中构建java代码 项目结构如下:Java 自定义maven插件:在一个版本中安装并执行插件,java,maven,maven-plugin,Java,Maven,Maven Plugin,我编写了一个自定义maven插件,它从自定义模式中构建java代码 项目结构如下: Project + plugin + web-application 反应器首先编译插件,然后编译应用程序 通常的mvn命令是: mvn 。。。谁在触发插件:scaffold包 在新机器上,构建失败,因为在反应堆计划构建阶段时插件还未知。因此,我必须先调用mvn install。然后mvn插件:scaffold包就像一个魔咒 问题是:每当我修改scaffolder插件并调用mvn-plugin:scaffol
Project
+ plugin
+ web-application
反应器首先编译插件,然后编译应用程序
通常的mvn命令是:
mvn
。。。谁在触发插件:scaffold包
在新机器上,构建失败,因为在反应堆计划构建阶段时插件还未知。因此,我必须先调用mvn install
。然后mvn插件:scaffold包
就像一个魔咒
问题是:每当我修改scaffolder插件并调用mvn-plugin:scaffold-package
时,scaffolder插件的修改还没有被使用,因为它还没有安装到存储库中。因此,我必须再次调用mvn install
有没有办法:
在一个步骤中?首先,您的插件必须是根项目的一个模块,解析才能正常工作:
<modules>
<module>plugin</module>
<module>app</module>
</modules>
第一次运行插件或插件更改时,您需要至少运行
包
阶段,以便创建插件jar。它必须从根项目运行:
mvn package
mvn package
插件将在生成源
阶段执行:
[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello, world.
[INFO]
更改插件时,只需运行(再次从根项目运行):
您将看到这些变化:
[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello, worldxxxx.
[INFO]
请参阅
安装
阶段包含软件包
阶段的完整示例。在运行插件之前,您真的需要安装
阶段,还是编译
就足够了?如果是,您可以使用mvn compile-plugin:scaffold-package
或定义您的阶段以要求compile
阶段。不确定是否正确理解这一点,但您不能简单地执行mvn-plugin:scaffold-package-U
,其中-U
标志更新依赖项“第一次运行插件或插件更改时”您正在告诉一个两步工作流。但我需要“一步完成”!!!两步是什么意思?您所需要的只是mvn包
(如果您重命名类,则使用clean)。我对措辞做了一点修改,希望现在清楚了,您应该运行singlemvn package
命令。我检查了您的项目,您的项目按预期运行。但是,如果您将
从/app/pom.xml
移动到/pom.xml
中,那么如果没有将插件安装到本地.m2,您将无法编译e> -repository。希望这会有帮助。是的,它不会工作。如果您有多个类似web应用的模块(这就是为什么我认为您希望将构建放在父pom上,否则就没有意义了)您可以将整个配置放入pluginManagement
并在web应用pom构建部分中按名称引用插件,也可以在root和web应用模块之间创建一个模块。
[INFO] --- plugin:1.0-SNAPSHOT:sayhi (sayhi) @ app ---
[INFO] Hello, worldxxxx.
[INFO]