2009-01-30 5 views

Antwort

10

Ich denke, das Plugin in Ihrer Eltern pom konfigurieren möchten , aber verwende es nur in den geerbten Projekten. Maven hat einen Abschnitt dafür - konfiguriere deine Plugins in pluginManagement, binde sie aber an eine Phase, wenn du sie brauchst, z. Lassen Sie das Phasen-Tag in pluginManagement aus, geben Sie es jedoch in Ihrem geerbten Pom an.

+1

Wie ist das besser als Rich Stellers Antwort (http://stackoverflow.com/questions/495314/automatically-activate-parent-plugin-in-maven/1209728#1209728)? Welchen Nutzen hat dieser Ansatz gegenüber dem pluginManagement? –

+0

@JimHurne Wenn Sie auswählen möchten, welche Ausführungen Sie dann im untergeordneten Pom angeben müssen, sollten Sie die Phase im übergeordneten Element angeben, wenn Sie dies immer tun möchten. –

1

Soweit ich weiß, gibt es dafür keine generische Lösung. Zumindest für den Moment ...

Eine Idee (ich habe es nicht versuchen, aber es arbeiten kann) ist, in der übergeordneten pom.xml ein Ausführungs Ziel zu definieren, die zum Beispiel nicht existiert:

<executions> 
    <execution> 
     <goals> 
      <goal>noGoal</goal> 
     </goals> 
    </execution> 
</executions> 

und in jedem Kind definieren Sie ein korrektes Ziel neu.

Das Problem dieser Lösung (wenn es natürlich funktioniert;)) ist, dass Sie die Plugin-Konfiguration für jedes Kind neu definieren müssen. Andernfalls wird es nicht ausgeführt.

+0

Ja, ich dachte an etwas ähnliches, aber wie Sie das verkleinern dieses Ansatzes gesagt ist, dass ich um dies in jedem Kind zu konfigurieren, das ich nicht machen möchte. – kukudas

4

Sie können ein Plug-in auf der obersten Ebene deklarieren und angeben, dass es übersprungen werden soll, und dann angeben, dass es auf der untergeordneten Ebene nicht übersprungen werden soll. Es ist nicht ganz automatisch, aber sehr minimal in der Override-Ausführlichkeit.

Eltern Pom, das Plugin zu deaktivieren, aber erklärt, alle config:

<plugin> 
    <groupid>org.apache.maven.plugins</groupid> 
    <artifactid>maven-surefire-plugin</artifactid> 
    <configuration> 
     <skip>true</skip> 
     ...lots more config... 
     ...lots more config... 
     ...lots more config... 
    </configuration> 
</plugin> 

Kind Pom, so dass das Plugin:

<plugin> 
    <groupid>org.apache.maven.plugins</groupid> 
    <artifactid>maven-surefire-plugin</artifactid> 
    <configuration> 
     <skip>false</skip> 
    </configuration> 
</plugin> 
+1

Das funktioniert leider nur, wenn das jeweilige Plugin "skip" als Konfiguration anbietet. Nicht alle Plugins! – jbandi

6

Das ist nicht genau das, was Sie wollen, aber ich denke, es wird gut genug für Sie arbeiten.

Wenn Sie das Plug-in in einem pluginManagement-Tag im Parent deklarieren, wird die Konfiguration von allen untergeordneten Projekten übernommen, die dieses Plugin deklarieren.

Zum Beispiel deklarieren Sie im übergeordneten Objekt, dass das Kompilier-Plugin Java 5 für die Testkompilierung verwendet.

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
    </plugin> 
    </plugins> 
</build> 
9

'siddhadev' ist genau richtig so:

<pluginManagement> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>test-compile</id> 
      <goals> 
      <goal>testCompile</goal> 
      </goals> 
      <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</pluginManagement> 

Dann wird in einem Kind, du einfach die Compiler-Plugin und die Konfiguration von den übergeordneten geerbt werden erklären.

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>child-caller</id> 
         <!-- 'phase' omitted --> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <tasks> 
           <echo message="called from child!" /> 
          </tasks> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

Und in dem Kind POM, können Sie explizit die Phase aufzuzählen, in denen diese aufgerufen werden soll: Sie können mit einer bestimmten ID der Plugin-Konfiguration in der übergeordneten pom definieren

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>child-caller</id> 
        <phase>compile</phase> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

I‘ Dies wurde zum Targeting verschiedener JREs verwendet. Da Sie das maven-compiler-plugin nicht mit verschiedenen Zielverzeichnissen verwenden können (was ich für einen Bug im Plugin halte), müssen Sie leider Ant verwenden.

4

ging ich mit folgenden Lösung:

  • Konfigurieren Sie das Plugin in den Eltern-pom im pluginManagement Schnitt. Binden Sie das Plugin an eine bestehende Phase.

  • Deaktivieren Sie das Plug-in für das Eltern-Pom, indem Sie es an eine nicht vorhandene Phase binden: Überschreiben Sie die Phase im Plugins-Abschnitt.

  • Aktivieren Sie das Plugin in jedem Child-Pom, indem Sie das Plug-in in den Plugins-Bereich einfügen.

Beispiel Eltern-pom:

<defaultGoal>install</defaultGoal> 
    <pluginManagement> 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-install-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>install-ejb-client</id> 
         <phase>install</phase> 
         <goals> 
         <goal>install-file</goal> 
         </goals> 
         <configuration> 
          <file>${ejb-client-file}</file> 
          <groupId>${project.groupId}</groupId> 
          <artifactId>${project.artifactId}</artifactId> 
          <version>${project.version}</version> 
          <packaging>jar</packaging> 
          <classifier>client</classifier> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
        ...     
     </plugins> 
    </pluginManagement> 
    <plugins> 
      <plugin> 
       <!-- deactivate the plugin for this project, only child-projects do generate ejb-clients --> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-install-plugin</artifactId> 
       <inherited>false</inherited> 
       <executions> 
        <execution> 
         <id>install-ejb-client</id> 
         <phase>none</phase> 
        </execution> 
       </executions> 
      </plugin> 
      ... 
    </plugins> 
</build> 

Beispiel kinder pom:

<build> 
    <plugins> 
      ... 
     <plugin> 
      <!-- Install the generated client-jar. Property 'ejb-client-file' has to be set! Plugin configuration is in the parent pom --> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
     </plugin>  
      ... 
    </plugins> 
</build> 
Verwandte Themen