2015-12-09 7 views
9

Ich möchte aus einem Maven-Pom zwei sequenzielle Ausführungen desselben Plugins erstellen, in der gleichen Phase, die sich nur durch eine einzige Eigenschaft unterscheidet, was zu zwei verschiedenen Archiven führt erstellt. Da die Konfiguration ziemlich kompliziert ist, würde ich sie lieber NICHT kopieren, nur um einen Wert zu ändern, was zu einem Wartungs-Albtraum führen würde. Wenn es irgendwie möglich wäre, eine solche Eigenschaft im Abschnitt <executions> der Plugin-Konfiguration zu definieren, könnte ich diese Kopfschmerzen vermeiden.Wie man ein Maven-Plugin zweimal mit unterschiedlicher Eigenschaft ausführt

Frage: Ist das möglich und wenn ja wie?

Update: Zwei Antworten haben erwähnt, mehrere Ausführungen zu verwenden, und eine davon erwähnt, dass Sie bei jeder Ausführung separate Konfigurationen haben können. Aber da der Großteil meiner Konfiguration zwischen den beiden Ausführungen konstant ist, kann ich eine Konfiguration auf der Ebene des Plugins haben und auch Konfigurationsabschnitte für die unterschiedlichen Teile haben?

+0

Mögliche Duplikate von [So rufen Sie die gleiche Maven-Build zweimal in einem Aufruf] (http://stackoverflow.com/questions/7239786/how-to-invoke-the-same-maven-build-twice-in- Ein Anruf) – approxiblue

+1

Nicht ein Duplikat dieser Frage würde ich sagen –

+0

@Steve überprüfen meine Antwort, ja, es kommt genau auf Ihren Punkt (in Ihrem Update geklärt) –

Antwort

10

Angesichts der einfachen Maven Source Plugin-Konfiguration (als Beispiel) haben Sie eine gemeinsame Konfiguration über alle seine Ausführungen (außerhalb des Elements executions) und dann eine benutzerdefinierte Konfiguration für jede Ausführung, für die gleiche Phase, wie von Ihrem angefordert Frage:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-source-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <includePom>true</includePom> 
      </configuration> 
      <executions> 
       <execution> 
        <id>test-id1</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <finalName>aaa</finalName> 
        </configuration> 
       </execution> 
       <execution> 
        <id>test-id2</id> 
        <phase>verify</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <finalName>bbb</finalName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

der Konfigurationseintrag <includePom>true</includePom> wird in diesem Fall mit den benutzerdefinierten Konfigurationen von jeder Ausführung zusammengeführt werden und als solche die gemeinsame Konfiguration als Plugin generische Konfiguration zentralisiert.

Weitere Informationen zu den verschiedenen Konfigurationsstufen finden Sie in der offiziellen Maven-Dokumentation here, insbesondere im Beispiel "Konfigurieren der Kompilierung, um zweimal ausgeführt zu werden". Weitere Details finden Sie auch in der offiziellen POM-Dokumentation, Abschnitt here, Plugins.

+0

Wenn ich Sie richtig verstanden habe, haben Sie die Antwort auf meine Update-Frage zur Verfügung gestellt. Sie scheinen zu sagen, dass es möglich ist, eine Konfiguration für das gesamte Plugin zu definieren (die die konstanten Elemente enthält) und separate Konfigurationen in den Ausführungen zu definieren (die die Unterschiede pro Ausführung enthalten). Ist das was du sagst? –

+0

Genau, ich habe gerade das Snippet getestet, das ich gepostet habe, bevor ich es zu meiner Antwort hinzugefügt habe, und es funktioniert perfekt. Ich werde bald die offizielle Dokumentation verlinken (die ich vor einiger Zeit genau über diesen Punkt gelesen habe). –

+0

betroffen Offizieller Dokumentationslink hinzugefügt. –

0

Sie brauchen eine andere Ausführung (noch an der gleichen Phase gebunden) erstellen

Um Doppel der Config zu vermeiden, können Sie die <configuration> außerhalb des <execution> Element setzen und dann in den zwei Ausführungen, Sie definieren die Eigenschaft, die anders ist.

aus dem Maven Genommen docs:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-myquery-plugin</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
      <id>execution1</id> 
      <phase>test</phase> 
      <configuration> 
       <url>http://www.foo.com/query</url> 
       <timeout>10</timeout> 
       <options> 
       <option>one</option> 
       <option>two</option> 
       <option>three</option> 
       </options> 
      </configuration> 
      <goals> 
       <goal>query</goal> 
      </goals> 
      </execution> 
      <execution> 
      <id>execution2</id> 
      <configuration> 
       <url>http://www.bar.com/query</url> 
       <timeout>15</timeout> 
       <options> 
       <option>four</option> 
       <option>five</option> 
       <option>six</option> 
       </options> 
      </configuration> 
      <goals> 
       <goal>query</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 
+1

Danke. Ja, ich habe diese Dokumentation gesehen, aber ich verstehe nicht, was die Bedeutung der "Optionen" ist. Wie werden sie benutzt? Das Beispiel zeigt das nicht. Eine Eigenschaft hat einen Namen und einen Wert, aber eine Option scheint nicht zu sein. –

+0

Hallo Steve, ich denke ich verstehe deine Frage dann nicht ganz. Könnten Sie klären, welche Bits nicht klar sind? ... und hast du versucht, die ganze verlinkte Seite zu lesen? Es erklärt, wie Plugins konfiguriert werden und wie die Konfiguration vererbt wird. – Augusto

+0

zur Klärung der Frage. –

0

Sie erstellen zwei < Ausführung> Elemente innerhalb der < Plugin> Erklärung. Jedes < Ausführung> -Element kann seinen eigenen < Konfiguration> Abschnitt haben.

Verwandte Themen