version-control maven-2 build-process versioning

version control - Ejecutar el objetivo del complemento Maven en el módulo principal, pero no en los hijos



version-control maven-2 (5)

Como se documenta en la sección de Plugins de la referencia pom:

Más allá de la coordenada estándar de groupId: artifactId: version, hay elementos que configuran el complemento o esta interacción de compilaciones con él.

  • inherited: true o false, independientemente de si esta configuración de complemento debe aplicarse a los POM heredados de este.

Así que solo agregue <inherited>false</inherited> a la configuración buildnumber-maven-plugin para evitar la herencia en los POM secundarios:

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

Tenemos un proyecto maven de múltiples módulos que usa un perfil que define un buildnumber-maven-plugin para incrementar un número de compilación y luego verificarlo en el control de la fuente.

Si defino el complemento en el pom.xml padre, también se ejecuta para todas las compilaciones secundarias.

Aquí está mi padre 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>


Hay una opción incorporada de maven: mvn --help ... -N,--non-recursive Do not recurse into sub-projects


Puede agregar <inherited>false</inherited> a la configuración del complemento para evitar la herencia en los POM secundarios:

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

O bien, si su complemento tiene múltiples ejecuciones, puede controlar qué ejecuciones se heredan y cuáles no al agregar la etiqueta heredada al cuerpo de la ejecución:

<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>


Si el complemento es personalizado y usted tiene acceso al código MOJO del complemento, puede marcar el complemento como aggregator ; si el comportamiento esperado es aplicable para todos los proyectos donde se usará el complemento.

Como se menciona en la especificación de la API Mojo ,

Marca este Mojo para ejecutarlo en forma de varios módulos, es decir, agregar la compilación con el conjunto de proyectos enumerados como módulos.

Ejemplo,

@Mojo(name = "createHF", inheritByDefault = false, aggregator = true) public class CreateHFMojo extends AbstractMojo { .. public void execute() throws MojoExecutionException, MojoFailureException { .... } .. }

Ejemplo detallado en github .