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 defectoparsedVersion
como prefijo ymajorVersion
,minorVersion
,incrementalVersion
como sufijos (verifique la documentación, también tendráclassifier
ybuildNumber
). 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
.