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

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

我编写了一个自定义maven插件,它从自定义模式中构建java代码

项目结构如下:

Project
+ plugin
+ web-application
反应器首先编译插件,然后编译应用程序

通常的mvn命令是:

mvn
。。。谁在触发插件:scaffold包

在新机器上,构建失败,因为在反应堆计划构建阶段时插件还未知。因此,我必须先调用
mvn install
。然后
mvn插件:scaffold包
就像一个魔咒

问题是:每当我修改scaffolder插件并调用
mvn-plugin:scaffold-package
时,scaffolder插件的修改还没有被使用,因为它还没有安装到存储库中。因此,我必须再次调用
mvn install

有没有办法:

  • 安装对插件的修改
  • 使用插件的修改构建webapplication

  • 在一个步骤中?

    首先,您的插件必须是根项目的一个模块,解析才能正常工作:

    <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)。我对措辞做了一点修改,希望现在清楚了,您应该运行single
    mvn 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]