Maven 如何将插件MOJO(目标)绑定到默认生命周期的几个阶段?

Maven 如何将插件MOJO(目标)绑定到默认生命周期的几个阶段?,maven,maven-3,maven-plugin,Maven,Maven 3,Maven Plugin,我有三个目标(莫霍斯): convert分配给默认阶段:过程测试资源 generateSubs分配给默认阶段:package generateTests分配给默认阶段:generateTestsources 如何将这三个mojo绑定到,这样用户就可以简单地使用插件,而无需进行特殊配置,也无需对project打包进行任何更改 用户只需添加: <plugin> <groupId>io.codearte.accurest</groupId> &l

我有三个目标(莫霍斯):

  • convert
    分配给默认阶段:
    过程测试资源
  • generateSubs
    分配给默认阶段:
    package
  • generateTests
    分配给默认阶段:
    generateTestsources
如何将这三个mojo绑定到,这样用户就可以简单地使用插件,而无需进行特殊配置,也无需对project
打包进行任何更改

用户只需添加:

<plugin>
    <groupId>io.codearte.accurest</groupId>
    <artifactId>accurest-maven-plugin</artifactId>
    <extensions>true</extensions>
</plugin>
这是正确的吗?进行这种配置的更好方法是什么

更多信息:

  • 工作
  • 使用此配置的示例项目:

我认为您要查找的是
Mojo
注释的
defaultPhase
属性,有关所有详细信息,请参阅。

您可以通过在
标记中用正确的目标替换
丑陋的修复程序来实现这一点:

<component-set>
  <components>
    <component>
        <role>org.apache.maven.lifecycle.Lifecycle</role>
        <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
        <role-hint>accurest</role-hint>
        <configuration>
            <id>accurest</id>
            <phases>
                <process-test-resources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:convert
                </process-test-resources>
                <generate-test-sources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateTests
                </generate-test-sources>
                <package>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateStubs
                </package>
            </phases>
            <default-phases>
                <process-test-resources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:convert
                </process-test-resources>
                <generate-test-sources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateTests
                </generate-test-sources>
                <package>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateStubs
                </package>
            </default-phases>
        </configuration>
    </component>
</components>

org.apache.maven.lifecycle.lifecycle
org.apache.maven.lifecycle.lifecycle
阿奎斯特
阿奎斯特
accurest:accurestmaven插件:${project.version}:convert
accurest:accurest maven插件:${project.version}:generateTests
accurest:accurest maven插件:${project.version}:GenerateSubs
accurest:accurestmaven插件:${project.version}:convert
accurest:accurest maven插件:${project.version}:generateTests
accurest:accurest maven插件:${project.version}:GenerateSubs

不,不是这样,OP希望插件在执行时不在POM中声明任何
defaultPhase
需要执行。是的,这是第二件事。。OP希望它能够自动与默认生命周期中的任何打包一起工作(而不是它们自己的打包)。:)(这就是我被卡住的地方,不必从maven core复制粘贴整个
default bindings.xml
)不可能。我不建议调整生命周期,只是让打包插件来决定。简单想象一下:如果每个构建插件都重写生命周期,会发生什么?我敢肯定,大多数Maven用户都知道如何将插件目标绑定到各个阶段,特别是使用一个准备好的复制粘贴示例:)@mᴀʀɪᴜsᴢ在您的示例中,您有一个定制的包,其生命周期涉及您的3个阶段(因此它以预期的方式工作)。这与为默认生命周期的所有打包调用插件目标不同。@Mᴀʀɪᴜsᴢ如果您使用
jar
打包进行测试,并且在
组件.xml
中有
jar
,您将看到它们是唯一被调用的,而正常
jar
的其他默认阶段没有被调用。这看起来仍然像是黑客攻击
<component-set>
    <components>
        <component>
            <role>org.apache.maven.lifecycle.Lifecycle</role>
            <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
            <role-hint>accurest</role-hint>
            <configuration>
                <id>accurest</id>
                <phases>
                    <phase>ugly-fix</phase> // plugin fail without this
                </phases>
                <default-phases>
                    <process-test-resources>
                        io.codearte.accurest:accurest-maven-plugin:${project.version}:convert
                    </process-test-resources>
                    <generate-test-sources>
                        io.codearte.accurest:accurest-maven-plugin:${project.version}:generateTests
                    </generate-test-sources>
                    <package>
                        io.codearte.accurest:accurest-maven-plugin:${project.version}:generateStubs
                    </package>
                </default-phases>
            </configuration>
        </component>
    </components>
</component-set>
<component-set>
  <components>
    <component>
        <role>org.apache.maven.lifecycle.Lifecycle</role>
        <implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
        <role-hint>accurest</role-hint>
        <configuration>
            <id>accurest</id>
            <phases>
                <process-test-resources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:convert
                </process-test-resources>
                <generate-test-sources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateTests
                </generate-test-sources>
                <package>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateStubs
                </package>
            </phases>
            <default-phases>
                <process-test-resources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:convert
                </process-test-resources>
                <generate-test-sources>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateTests
                </generate-test-sources>
                <package>
                    io.codearte.accurest:accurest-maven-plugin:${project.version}:generateStubs
                </package>
            </default-phases>
        </configuration>
    </component>
</components>