J'ai un pom avec le GAV suivant
<groupId>com.company.services</groupId>
<artifactId>test-branch-2</artifactId>
<version>1.0.21-SNAPSHOT</version>
Je veux enlever -SNAPSHOT
à partir de cela en utilisant maven en mode batch, donc je peux le faire avec Jenkins et ne pas avoir à spécifier quoi que ce soit manuellement.
J'ai regardé la documentation de la version: set mais toutes les options m'offrent une invite interactive et me demandent de taper un nom pour la version.
Je préfère le plugin de versions, pas le plugin de version.
Depuis la version 2.10 du plugin Versions Maven, vous pouvez simplement faire:
mvn versions:set -DremoveSnapshot
Si vous ne voulez vraiment pas utiliser le plug-in de publication Maven (pour une raison quelconque), voici comment je réussis à supprimer le suffixe SNAPSHOT (classé comme classificateur) d'un POM maven de manière standard (c'est-à-dire sans script, pas de plugin maven personnalisé).
Compte tenu du profil suivant:
<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>
Et simplement exécuter: mvn validate -Pdrop-snapshot
La version d'un exemple de pom est passée de 0.0.1-SNAPSHOT
à 0.0.1
.
Comment cela fonctionne réellement:
build-helper-maven-plugin
, parse-version
objectif, analysera la version actuelle du POM et la définira dans un ensemble de propriétés ayant par défaut parsedVersion
comme préfixe et majorVersion
, minorVersion
, incrementalVersion
comme suffixes (consultez la documentation, vous aurez également classifier
et buildNumber
). Par conséquent, après son exécution, nous pouvons ensuite utiliser dans notre POM les propriétés comme ${parsedVersion.majorVersion}
etc.versions-maven-plugin
, set
objectif, utilisera ensuite ces propriétés pour créer la nouvelle version que vous souhaitez réellement (dans ce cas, supprimer le SNAPSHOT, car nous avons exclu le ${parsedVersion.classifier}
propriété).versions-maven-plugin
, commit
objectif, rendra ces modifications effectives.Ajoutez les éléments suivants à votre 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>
Vous pouvez maintenant supprimer le -SNAPSHOT
partie de la version de votre projet avec:
mvn build-helper:regex-property versions:set -N
Le -N
indique à Maven de ne traiter le projet racine que si des modules sont définis dans votre POM. Ce n'est pas strictement nécessaire mais empêche le build-helper
le plugin ne s'exécute pas inutilement contre les sous-modules. Le plugin versions
ne s'exécute que sur le projet racine dans tous les cas et traverse automatiquement tous les modules. Pensez à utiliser la règle reactorModuleConvergence
de maven-enforcer
plugin pour s'assurer que les projets multi-modules sont correctement gérés.
Tu peux courir mvn versions:commit
pour supprimer les POM de sauvegarde générés par versions:set
. Vous pouvez également ajouter <generateBackupPoms>false</generateBackupPoms>
à la configuration du plugin versions
.
Similaire à l'approche d'A_Di-Matteo avec build-helper
, mais sans nécessiter de configuration de plugins supplémentaires:
mvn build-helper:parse-version versions:set \
-DnewVersion=\${parsedVersion.majorVersion} \
.\${parsedVersion.minorVersion} \
.\${parsedVersion.incrementalVersion \
.\${parsedVersion.buildNumber} \
versions:commit
Cela remplacera votre 1.0.0.0-SNAPSHOT
avec 1.0.0.0
dans le pom.xml
.