如何默认将maven插件附加到阶段?

Pab*_*dez 22 java maven-plugin maven

我应该在编译阶段运行Maven插件,因此,该项目占用我的插件,我必须做这样的事情:

<executions>
 <execution>
  <phase>compile</phase>
  <goals>
   <goal>my-goal</goal>
  </goals>
 </execution>
</executions>
Run Code Online (Sandbox Code Playgroud)

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

这可能吗?

bma*_*ies 8

把一个@phase 注释在魔classdef注释.

医生说:

@phase <phaseName>
Run Code Online (Sandbox Code Playgroud)

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

如果这不起作用,我想JIRA是有道理的.

  • 哦,是的,当然.为了避免这种情况,您需要自定义生命周期. (7认同)
  • 好的,这部分工作**部分**真的,我不必明确`phase`部分,但我仍然需要把整个`<execution>`废话 (4认同)

Wil*_*iam 6

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

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

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

例如,消耗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>
Run Code Online (Sandbox Code Playgroud)