2009-11-03 14 views
46

Wir haben ein Multi-Modul Maven-Projekt, das ein Profil verwendet, das eine buildnumber-maven-plugin definiert, um eine Build-Nummer zu inkrementieren und dann in die Quellcodeverwaltung zu überprüfen.Maven Plugin-Ziel auf Eltern-Modul, aber nicht auf Kinder

Wenn ich das Plugin in der übergeordneten pom.xml definieren, wird es auch für alle untergeordneten Builds ausgeführt.

Hier ist meine Mutter pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.webwars</groupId> 
    <artifactId>parent</artifactId> 
    <packaging>pom</packaging> 
    <properties> 
    <buildNumber.properties>${basedir}/../parent/buildNumber.properties</buildNumber.properties> 
    </properties> 
    <version>1.0-SNAPSHOT</version> 
    <name>Parent Project</name> 
    <profiles> 
    <profile> 
     <id>release</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <debug>false</debug> 
       <optimize>true</optimize> 
      </configuration> 
      </plugin> 
      <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>buildnumber-maven-plugin</artifactId> 
      <version>1.0-beta-3</version> 
      <executions> 
       <execution> 
       <phase>validate</phase> 
       <goals> 
        <goal>create</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <buildNumberPropertiesFileLocation>${buildNumber.properties}</buildNumberPropertiesFileLocation> 
       <getRevisionOnlyOnce>true</getRevisionOnlyOnce> 
       <doCheck>false</doCheck> 
       <doUpdate>false</doUpdate> 
       <format>{0, number}</format> 
       <items> 
       <item>buildNumber</item> 
       </items> 
      </configuration> 
      </plugin> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-scm-plugin</artifactId> 
      <executions> 
       <execution> 
       <phase>install</phase> 
       <goals> 
        <goal>checkin</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <basedir>${basedir}</basedir> 
       <includes>buildNumber.properties</includes> 
       <message>[Automated checkin] of ${basedir} Build version: ${major.version}.${minor.version}.${buildNumber}</message> 
       <developerConnectionUrl>...</developerConnectionUrl> 
      </configuration> 
      </plugin>   
     </plugins> 
     </build> 
    </profile> 
    </profiles> 

    <modules> 

    <module>../common</module> 
    <module>../data</module> 
    <module>../client</module> 
    <module>../webplatform</module> 
    </modules> 
... 
</project> 

Antwort

78

Wie im Referenz Plugins Abschnitt des pom dokumentiert:

jenseits des Standard Koordinate groupId: artifactId: Version gibt Elemente, die konfigurieren Das Plugin oder das baut Interaktion damit.

  • geerbt: wahr oder falsch, ob dieses Plugin-Konfiguration zu POMs gelten sollten, die von dieser erben.

Also nur <inherited>false</inherited> zur Buildnumber-Maven-Plugin-Konfiguration hinzufügen Vererbung bei Kindern POMs zu vermeiden:

 <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>buildnumber-maven-plugin</artifactId> 
     <version>1.0-beta-3</version> 
     <inherited>false</inherited> 
     ... 
     </plugin> 
21

Sie <inherited>false</inherited> zur Plugin-Konfiguration Vererbung bei Kindern POMs zu vermeiden hinzufügen:

 <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>buildnumber-maven-plugin</artifactId> 
     <version>1.0-beta-3</version> 
     <inherited>false</inherited> 
     ... 
     </plugin> 

Oder, wenn Ihr Plugin mehrere Ausführungen hat, können Sie steuern, welche Ausführungen vererbt werden und welche nicht durch die geerbte Tag der Ausführung Körper und fügte hinzu:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>parent-only</id> 
     <phase>initialize</phase> 
     <inherited>false</inherited> 
     <configuration> 
      <target> 
      <echo message="Echoed only by this module."/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
     <execution> 
     <id>all-modules</id> 
     <phase>initialize</phase> 
     <inherited>true</inherited> <!-- Defaults to true, so you could leave this line out --> 
     <configuration> 
      <target> 
      <echo message="Echoed in this module and each child module."/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
4

Es gibt einen eingebauten, maven Option: mvn --help ... -N,--non-recursive Do not recurse into sub-projects

1

Wenn das Plugin benutzerdefinierte ist und Sie haben Zugriff MOJO Code-Plugin, können Sie das Plugin als aggregator markieren; wenn das erwartete Verhalten für alle Projekte gilt, in denen das Plugin verwendet werden soll.

Wie in Mojo API Specification erwähnt,

Flags Diese Mojo es in einer Multi-Modul Art und Weise ausgeführt werden, d.h. aggregieren den build mit dem Satz von Projekten als Module aufgeführt.

Beispiel,

@Mojo(name = "createHF", inheritByDefault = false, aggregator = true) 
public class CreateHFMojo extends AbstractMojo { 

.. 

public void execute() throws MojoExecutionException, MojoFailureException { 
.... 
} 

.. 

} 

Detaillierte Beispiel auf github.

Verwandte Themen