2016-01-20 8 views
5

Ich möchte ein Plugin Ziel von der Befehlszeile ausführen, aber mehrere Ausführungen des Plugins durchführen. Zu diesem Zweck sieht mein POM wie folgt aus:Maven: Ausführung von der Kommandozeile und mehrere Ausführungen in der Konfig

<plugin> 
    <groupId>xxx.yyy</groupId> 
    <artifactId>zzz</artifactId> 
    <version>1.1.6</version> 
    <executions> 
     <execution> 
      <id>default-cli-1</id> 
      <goals> 
       <goal>mygoal</goal> 
      </goals> 
      <configuration> 
       .... config1 .... 
      </configuration> 
     </execution> 
     <execution> 
      <id>default-cli-2</id> 
      <goals> 
       <goal>mygoal</goal> 
      </goals> 
      <configuration> 
       .... config2 .... 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Was würde Ich mag zu tun, so etwas wie:

mvn xxx.yyy.zzz:mygoal 

und das würde die beiden Hinrichtungen dann ausführen. Aber ich kann nicht herausfinden, wie.

Ich bin mir bewusst, dass ich eine <id> nicht verwenden kann, wenn Sie über die Befehlszeile ausführen. Das ist, was die default-cli ist. Die <id> muss jedoch innerhalb <executions> eindeutig sein, was bedeutet, dass ich die default-cli nur auf eine execution setzen kann.

Maven-Version 3.0.5.

Antwort

5

Sie können ein Ziel ausführen (und seine Ausführung) von der Kommandozeile aus Maven Start 3.3.1 auf und this neue Funktion, über die @executionId zusätzliche Option.

In Bezug auf Maven und Ausführung IDs können Sie auch this SO question überprüfen.


Bevor Maven 3.3.1 Sie könnten stattdessen binden die beiden Ausführungen zu einer Phase, die normalerweise nicht schaden würde (wie validate) und haben so etwas wie die folgenden:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.5</version> 
    <executions> 
     <execution> 
      <id>execution-1</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>something1</classifier> 
      </configuration> 
     </execution> 
     <execution> 
      <id>execution-2</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>something2</classifier> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Dann Ausführung:

mvn validate 

Sie werden die beiden Ausführungen des gleichen Ziels des gleichen Plugins effektiv ausführen, als Teil einer harmlosen Phase.

Wenn Sie sich nicht als Teil dieser Phase durch default (verständlich) haben wollen, dann können Sie sie zu einem Profil bewegen und aktivieren Sie es als Teil der Ausführung:

mvn validate -PpluginGoalExecution 

Der Vollständigkeit , sieht das Profil wie:

<profile> 
    <id>pluginExecution</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.5</version> 
       <executions> 
        <execution> 
         <id>execution1</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
         <configuration> 
          <classifier>something1</classifier> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution2</id> 
         <phase>validate</phase> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
         <configuration> 
          <classifier>something2</classifier> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

und es versteht sich von selbst: die ID des Profils ganz selbst in diesem Fall erklärend über dem Plugin und es wäre auszuführen, die Ziel sein sollte, tatsächlich (das heißt, der Zweck das Profil, wie üblich).

aktualisiert
nur kosmetische, aber man könnte auch über das Element mit dem Profil Build hinzufügen:

<defaultGoal>validate</defaultGoal> 

So dass Sie nur den folgenden Maven-Befehl (nur Profilaktivierung) zu laufen brauchen würden:

mvn -PpluginGoalExecution 

Und es würde dann automatisch die Validierungsphase und die konfigurierten Plug-in-Ausführungen ausführen. Keine große Veränderung (wie gesagt, kosmetisch), aber vielleicht näher an einer Plugin-Zielausführung als an einem Maven-Phasen-Aufruf (wieder nur Aussehen).

+0

Danke. Das ist eine gute Antwort. Leider bin ich immer noch auf Maven 3.0.5. – peterh

+0

Wenn du auf Maven 3.0.5 bist, ist das nicht möglich ... Nur möglich über Profile, die über 'mvn -PXXX1 aktiviert werden können ...' ... – khmarbaise

+0

@peterh ok Ich werde meine Antwort entsprechend aktualisieren, da gibt es einen Trick, es kann für Sie wert sein –

Verwandte Themen