web-dev-qa-db-fra.com

Mise à jour des numéros de version des modules dans un projet Maven multi-modules

J'ai un projet multi-module Maven. Nous avons l'intention de versionner tous ces modules ensemble. Mais à partir de maintenant je termine la version codée en dur dans chacun des modules pom.xml comme ci-dessous

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

et le module parent principal a la configuration ci-dessous

<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>
287
sandeepkunkunuru

Utilisez versions:set à partir du versions-maven plugin :

_mvn versions:set -DnewVersion=2.50.1-SNAPSHOT
_

Il ajustera toutes les versions de pom, les versions parent et les versions de dépendance dans un projet multi-module.

Si vous avez commis une erreur, faites

_mvn versions:revert
_

après ou

_mvn versions:commit
_

si vous êtes satisfait du résultat.


Remarque: cette solution suppose que tous les modules utilisent également le pom agrégé comme pom parent, un scénario considéré comme standard au moment de cette réponse. Si ce n'est pas le cas, optez pour réponse de Garret Wilson .

554
Sean Patrick Floyd

La réponse donnée suppose que le projet en question utilise l'héritage de projet en plus de l'agrégation de modules. En fait, ce sont des concepts distincts:

https://maven.Apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

Certains projets peuvent être une agrégation de modules, sans toutefois avoir de relation parent-enfant entre le POM agrégateur et les modules agrégés. (Il peut ne pas y avoir de relation parent-enfant, ou les modules enfants peuvent utiliser un POM distinct en tant que "parent".) Dans ces situations, la réponse donnée ne fonctionnera pas.

Après beaucoup de lecture et d’expérimentation, il apparaît qu’il existe un moyen d’utiliser le Versions Maven Plugin pour mettre à jour non seulement le POM de l’agrégateur, mais également tous les modules agrégés; c'est l'option processAllModules. La commande suivante doit être effectuée dans le répertoire du projet d'agrégateur:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules

Le plugin Versions Maven ne mettra pas seulement à jour les versions de tous les modules contenus, il mettra également à jour les dépendances entre modules !!!! C'est une victoire énorme qui permettra de gagner beaucoup de temps et d'éviter toutes sortes de problèmes.

Bien sûr, n'oubliez pas de valider les modifications dans tous les modules, ce que vous pouvez également faire avec le même commutateur:

mvn versions:commit -DprocessAllModules

Vous pouvez décider de vous passer complètement du POMS de secours et de tout faire en une seule commande:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false
39
Garret Wilson

Vous voudrez peut-être regarder dans le but release: update-versions du plugin Maven release. Il mettra à jour la version du parent ainsi que tous ses modules.


Mise à jour: Veuillez noter que ce qui précède est le plugin de publication. Si vous ne le relâchez pas, vous voudrez peut-être utiliser versions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT
22
Nishant

Si vous souhaitez automatiser entièrement le processus (c’est-à-dire que vous souhaitez incrémenter le numéro de version sans avoir à connaître le numéro de version actuel), vous pouvez procéder comme suit:

mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit
12
Crummy

Je vous encourage à lire les Maven Book about multi-module (réacteur) construit.

Je voulais en particulier ce qui suit:

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

devrait être changé en. Ici, prenez garde à la version non définie uniquement dans la partie parent définie.

<modelVersion>4.0.0</modelVersion>

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>

Ceci est un meilleur lien .

11
khmarbaise

versions:update-child-modules ressemble à ce que vous recherchez. Vous pouvez créer des versions: définissez comme indiqué, mais il s’agit d’un moyen léger de mettre à jour les numéros de version parents. À mon avis, vous devez supprimer les définitions <version>, car elles hériteront du numéro de version du module parent.

5
Jon Onstott

Le mieux est que, puisque vous souhaitez regrouper vos modules, vous pouvez spécifier la balise <dependencyManagement> dans la partie la plus externe pom.xml (module parent) directement sous la balise <project>. Il contrôle la version et le nom du groupe. Dans votre module individuel, il vous suffit de spécifier la balise <artifactId> dans votre pom.xml. Il prendra la version du fichier parent.

2
murali