默认情况下,如何将 maven 插件附加到一个阶段?

2022-09-01 19:31:27

我有一个应该在编译阶段运行的maven插件,所以在使用我的插件项目中,我必须做这样的事情:

<executions>
 <execution>
  <phase>compile</phase>
  <goals>
   <goal>my-goal</goal>
  </goals>
 </execution>
</executions>

我需要的是,如果用户已经包含了我的插件,则默认情况下附加到编译阶段(理想情况下,上述部分不是必需的,只是插件声明)。my-goal

这可能吗?


答案 1

在 Mojo classdef 批注中放置批注。@phase

文档说:

@phase <phaseName>

此批注指定此目标的默认阶段。如果将此目标的执行添加到 pom.xml 并且未指定阶段,则默认情况下,Maven 会将目标绑定到此注释中指定的阶段。

如果这不起作用,我想JIRA是必要的。


答案 2

在插件中创建 src\main\resources\META-INF\plexus\components.xml的实例。

在那里,为您希望Mojo支持的工件类型创建LifeCycle映射。确保它列出了您要支持的所有阶段和插件。可能最好从maven-core.jar复制。

然后将您的插件添加到您希望构建它们的阶段的相应 LifeCycle 中。

例如,将 consume-aar Mojo 添加到 aar 生命周期的编译阶段。

<!--  Android archive (aar) support -->
<component>
  <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
  <role-hint>aar</role-hint>
  <implementation>
    org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
  </implementation>
  <configuration>
    <phases>
      <generate-sources>
        com.jayway.maven.plugins.android.generation2:android-maven-plugin:generate-sources
      </generate-sources>
      <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
      <compile>
        com.jayway.maven.plugins.android.generation2:android-maven-plugin:consume-aar,
        org.apache.maven.plugins:maven-compiler-plugin:compile
      </compile>

推荐