web-dev-qa-db-fra.com

Supprimer -SNAPSHOT de la version du projet dans pom

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.

25
Jepper

Depuis la version 2.10 du plugin Versions Maven, vous pouvez simplement faire:

mvn versions:set -DremoveSnapshot
40
Rinke

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:

  • Le 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.
  • Le 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é).
  • Enfin, le versions-maven-plugin, commit objectif, rendra ces modifications effectives.
11
A_Di-Matteo

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.

3
Rinke

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.

3
mzc