2016-04-29 5 views
10

Meine custom maven plugin haben drei Tore (Mojos):Wie binden Sie Plugin-Mojos (Ziele) an wenige Phasen des Standardlebenszyklus an?

  • convert zur Standard Phase zugeordnet: process-test-resources
  • generateStubs auf Standard Phase zugeordnet: package
  • generateTests auf Standard Phase zugeordnet: generate-test-sources

Wie bindet man diese drei mojo an default lifcycle phase, so kann der Benutzer das Plugin einfach ohne verwenden spezielle Konfiguration und Änderungen am Projekt packaging?

Benutzer sollten einfach hinzufügen:

<plugin> 
    <groupId>io.codearte.accurest</groupId> 
    <artifactId>accurest-maven-plugin</artifactId> 
    <extensions>true</extensions> 
</plugin> 

statt

<plugin> 
    <groupId>io.codearte.accurest</groupId> 
    <artifactId>accurest-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>convert</goal> 
       <goal>generateStubs</goal> 
       <goal>generateTests</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Ich kann dies wie unten mit components.xml erreichen, aber dies erfordert einige hässlichen Hacks (specifing nicht vorhandene Phase - ugly-fix) und I bin mir nicht sicher, ob diese Lösung in allen Fällen funktioniert.

<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> 

Ist das korrekt? Ist eine solche Konfiguration besser?

Weitere Informationen:

Antwort

1

Sie können das erreichen, indem ugly-fix mit der richtigen Ziele in <phases> Tag ersetzt:

<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> 

+1

Das sieht immer noch nach Hack aus – MariuszS

-1

Ich denke, was Sie suchen das defaultPhase Attribut der Mojo Anmerkung ist, https://maven.apache.org/components/plugin-tools/maven-plugin-tools-annotations/ für alle Details sehen.

+1

Nein, das ist es nicht, OP will das Plugin ohne Deklaration jeder '' im POM ausgeführt werden . Ein 'defaultPhase' erfordert eine Ausführung. – Tunaki

+0

Ah, hab es. Das würde bedeuten, dass Sie einen Verpackungstyp mit einem Lebenszyklus einführen müssen. –

+1

Yeah und das ist die zweite Sache .. OP will, dass es automatisch mit jeder Verpackung im Standard-Lebenszyklus (nicht ihre eigenen) funktioniert. :) (Das ist, wo ich feststecke, ohne die gesamte 'default-bindings.xml' aus dem Maven-Kern kopieren zu müssen) – Tunaki