2016-03-23 9 views
1

Ich arbeite an einem Maven-Plugin zum Erstellen eines benutzerdefinierten Pakettyps. Ich habe es packen und eine Strafe erstellen. Ich habe jedoch ein vorheriges Ziel, das einen Bibliotheksordner erstellt.Maven 3.0 Plugin - Wie setze ich ein Ziel, das von einem anderen Ziel abhängt

Ich möchte mein Build (Paket) Ziel, um sicherzustellen, dass das vorherige Lib Ziel wurde bereits zuerst ausgeführt. Wie kann ich das machen?

erklärte die Build-Klasse wie folgt:

@Mojo(name = "build", defaultPhase = LifecyclePhase.PACKAGE, 
     requiresProject = true) 
@Execute(goal="lib", phase = LifecyclePhase.PREPARE_PACKAGE) 
public class BuildComponent extends AbstractComponentMojo 

und die lib-Klasse wie folgt:

@Mojo(name = "lib", defaultPhase = LifecyclePhase.PREPARE_PACKAGE, 
     requiresProject = true) 
@Execute(goal="compile", phase = LifecyclePhase.COMPILE) 
public class LibComponent extends AbstractLibMojo 

Das funktionierte so werden beide Ziele laufen. Ich würde gerne mvn groupId:build statt mvn groupId:lib groupId:build anrufen, um einen erfolgreichen Build zu haben.

Fehle ich einige Annotationsverarbeitung zur Laufzeit? Von dem, was ich gelesen habe, denke ich, brauche ich einen benutzerdefinierten Lebenszyklus, um das zu funktionieren. Ich habe die Maven Lifecycle Extensions example gefunden, aber ich bin mir nicht sicher, wie man es benutzt, um Ziele oder Phasen in den Lebenszyklusmaven zu injizieren, der sich aufbaut und anfängt.

+0

Warum definieren Sie ein '@ Execute'? – khmarbaise

+0

@khmarbaise, ich dachte, es wäre ein Weg, ein Ziel zu definieren, das zuerst laufen würde. – Raystorm

Antwort

0

Ich konnte es zum Laufen bringen. Aber ich habe das Gefühl, dass ich den Ansatz anstelle des Ansatzes mache. Ich würde gerne sehen Maven 3.0 Antwort

Grundsätzlich habe ich die @Execute Annotationen entfernt, da sie sowieso nicht benötigt wurden. Dann habe ich die Datei src/main/resources/META-INF/plexus/components.xml

<?xml version="1.0" encoding="UTF-8"?> 
<component-set> 
    <components> 
    <component> 
     <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role> 
     <role-hint>wcc</role-hint> 
     <implementation> 
     org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping 
     </implementation> 
     <configuration> 
      <phases> 
       <process-resources> 
       org.apache.maven.plugins:maven-resources-plugin:resources 
       </process-resources> 
       <compile> 
       org.apache.maven.plugins:maven-compiler-plugin:compile 
       </compile> 
       <process-classes> 
       org.ucmtwine:ucm-maven-plugin:classpath 
       </process-classes> 
       <process-test-resources> 
       org.apache.maven.plugins:maven-resources-plugin:testResources 
       </process-test-resources> 
       <test-compile> 
       org.apache.maven.plugins:maven-compiler-plugin:testCompile 
       </test-compile> 
       <test> 
       org.apache.maven.plugins:maven-surefire-plugin:test 
       </test> 
       <prepare-package> 
       org.ucmtwine:ucm-maven-plugin:lib 
       </prepare-package> 
       <package> 
       org.ucmtwine:ucm-maven-plugin:build 
       </package> 
       <install> 
       org.apache.maven.plugins:maven-install-plugin:install 
       </install> 
       <deploy> 
       org.ucmtwine:ucm-maven-plugin:deploy 
       </deploy> 
      </phases> 
     </configuration> 
    </component> 

    <component> 
     <role>org.apache.maven.artifact.handler.ArtifactHandler</role> 
     <role-hint>wcc</role-hint> 
     <implementation> 
     org.apache.maven.artifact.handler.DefaultArtifactHandler 
     </implementation> 
     <configuration> 
     <!--the extension used by Maven in the repository--> 
     <extension>zip</extension> 
     <!--the type used when specifying dependencies etc.--> 
     <type>wcc</type> 
     <!--the packaging used when declaring an implementation of 
      the packaging--> 
     <packaging>wcc</packaging> 
     </configuration> 
    </component> 
    </components> 
</component-set> 

Und dann in der Anwendung, wo ich das Plugin bin mit setze ich <packaging>wcc</packaging> und <extensions>true</extensions>, wo ich meine benutzerdefinierte Plugin erklären.