scm pom plugin example ejemplo central maven maven-3 pom.xml maven-release-plugin versions-maven-plugin

maven - plugin - Elimine-SNAPSHOT de la versión del proyecto en pom



pom.xml dependencies (4)

Tengo un pom con el siguiente GAV

<groupId>com.company.services</groupId> <artifactId>test-branch-2</artifactId> <version>1.0.21-SNAPSHOT</version>

Quiero eliminar -SNAPSHOT de esto utilizando maven en modo batch, para poder hacerlo con Jenkins y no tener que especificar nada manualmente.

He consultado la documentación para la versión: establecer, pero todas las opciones me ofrecen una solicitud interactiva y me piden que escriba un nombre para la versión.

Preferiría el plugin de versiones, no el plugin de lanzamiento.


Agregue lo siguiente a su POM:

<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.11</version> <configuration> <name>newVersion</name> <value>${project.version}</value> <regex>-SNAPSHOT</regex> <failIfNoMatch>false</failIfNoMatch> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </build>

Ahora puede eliminar la parte -SNAPSHOT de la versión de su proyecto con:

mvn build-helper:regex-property versions:set -N

La -N le dice a Maven que solo procese el proyecto raíz en caso de que tenga módulos definidos en su POM. Esto no es estrictamente necesario pero evita que el complemento de build-helper ejecute innecesariamente contra los submódulos. El complemento de las versions solo se ejecuta en el proyecto raíz en cualquier caso, y atraviesa todos los módulos automáticamente. Considere el uso de la regla maven-enforcer complemento maven-enforcer para asegurarse de que los proyectos de múltiples módulos se manejen correctamente.

Puede ejecutar mvn versions:commit para eliminar los POM de copia de seguridad generados por las versions:set . Alternativamente, puede agregar <generateBackupPoms>false</generateBackupPoms> a la configuración del complemento de versions .


Desde la versión 2.10 de Versions Maven Plugin puedes simplemente hacer:

mvn versions:set -DremoveSnapshot


Si realmente no desea utilizar el Complemento de lanzamiento de Maven (por cualquier motivo), así es como logro eliminar el sufijo SNAPSHOT (clasificado como clasificador) de un POM de Maven de manera estándar (es decir, sin secuencias de comandos, no hay plugin personalizado de maven).

Dado el siguiente perfil:

<profile> <id>drop-snapshot</id> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.11</version> <executions> <execution> <id>parse-version</id> <phase>validate</phase> <goals> <goal>parse-version</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>2.2</version> <executions> <execution> <id>set-version</id> <phase>validate</phase> <goals> <goal>set</goal> </goals> <configuration> <newVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</newVersion> </configuration> </execution> <execution> <id>upgrade-pom</id> <phase>validate</phase> <goals> <goal>commit</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile>

Y simplemente ejecutando: mvn validate -Pdrop-snapshot
La versión de un ejemplo pom pasó de 0.0.1-SNAPSHOT a 0.0.1 .

Cómo funciona realmente:

  • El objetivo de build-helper-maven-plugin , parse-version , analizará la versión actual del POM y la configurará en un conjunto de propiedades que tienen por defecto parsedVersion como prefijo y majorVersion , minorVersion , incrementalVersion como sufijos (verifique la documentación, también tendrá classifier y buildNumber ). Por lo tanto, después de su ejecución, podemos utilizar en nuestro POM las propiedades como ${parsedVersion.majorVersion} y así sucesivamente.
  • La versions-maven-plugin , set goal, luego usará estas propiedades para construir la nueva versión que realmente desea (en este caso, eliminando el SNAPSHOT, porque excluimos la propiedad ${parsedVersion.classifier} ).
  • Por último, las versions-maven-plugin , commit goal, harán que estos cambios sean efectivos.

Similar al enfoque de A_Di-Matteo con build-helper , pero sin la necesidad de configuración de complementos adicionales:

mvn build-helper:parse-version versions:set / -DnewVersion=/${parsedVersion.majorVersion} / ./${parsedVersion.minorVersion} / ./${parsedVersion.incrementalVersion / ./${parsedVersion.buildNumber} / versions:commit

Esto reemplazará su 1.0.0.0-SNAPSHOT con 1.0.0.0 en el pom.xml .