Dans un projet Maven, comment puis-je mettre à jour automatiquement la version tous les modules de l'enfant, ainsi que le parent?
-
23-09-2019 - |
Question
J'ai un projet multi-module.
parent POM (1.0-SNAPSHOT) |-- module1 (1.0-SNAPSHOT) |-- module2 (1.0-SNAPSHOT) `-- module3 (1.0-SNAPSHOT)
Quand j'exécute la libération mvn: il prépare vérifier que POM parent a une version snapshot et tous les modules dépendants ne disposent pas d'une version snapshot. Comment mettre à jour automatiquement tous les modules enfants de INSTANTANÉ à la prochaine version de version?
Je voudrais incrémenter automatiquement la version pour tous les modules.
La solution
Le plugin de libération peut gérer cela. Avez-vous vérifié Mise à jour des versions POM ? Mais...
Je ne comprends pas quelque chose. Changer la version dans les POMs de x-SNAPSHOT à une nouvelle version et heurtant la version dans les POMs à une nouvelle valeur y-SNAPSHOT devrait être fait par release:prepare
comme expliqué dans Préparer un de sortie. Qu'est-ce qui ne va pas lors de l'utilisation de cet objectif?
Mise à jour: le paramètre de autoVersionSubmodules
peut-être ce que vous cherchez. De Préparer une version exemple:
Projets multi-modules
Vous êtes invité à la version nombre pour chaque module du projet. Si vous préférez que tous les modules se la même version que le POM parent, vous pouvez définir l'option
autoVersionSubmodules
àtrue
. Maintenant, c'est à votre tour sera demandé qu'une seule fois pour la version et la prochaine version version de développement.
Snippet de parent pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>x.y.z</version>
<configuration>
<goals>deploy</goals>
<autoversionsubmodules>true</autoversionsubmodules>
</configuration>
</plugin>
</plugins>
</build>
Autres conseils
Une façon flexible pour définir versions POMS, projets multi-modules inclus, est Versions plugin Maven .
mvn versions:set -DnewVersion=your_new_version
Il ajustera toutes les versions de pom, les versions des parents et des enfants dans les versions d'un projet multi-modules.
puis
mvn versions:commit
ou
mvn versions:revert
- Faites la version de tous les sous-projet soit défini dans sa pom.xml mère.
-
Assurez-vous que toutes les versions sous-projets sont les mêmes à la version de leurs parents.
<groupId>com.xyz</groupId> <artifactId>module-1</artifactId> <packaging>jar</packaging> <parent> <groupId>com.xyz</groupId> <artifactId>xyz-parent</artifactId> <version>1.0.123-SNAPSHOT</version> </parent>
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>xyz-parent</artifactId> <groupId>com.xyz</groupId> <version>1.0.123-SNAPSHOT</version> <packaging>pom</packaging> <name>xyz-parent</name> <dependencyManagement> <dependencies> <!-- Message --> <dependency> <groupId>com.xyz</groupId> <artifactId>module-1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>com.xyz</groupId> <artifactId>module-2</artifactId> <version>${project.version}</version> </dependency> </dependencyManagement> </project>
-
Créer un autre pom.xml de regrouper ces projets ensemble.
<modules> <module>../xyz-parent</module> <module>../module-1</module> <module>../module-2</module> </modules>
-
puis mettre à jour la version du projet parent, puis construire par commande ci-dessous.
mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT mvn clean install
-
puis mettre à jour la version du parent qui est défini dans les sous-projet à celui latset
mvn -N versions:update-child-modules
-
Ensuite, les construire ensemble.
@echo on cd .\xyz-parent call mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT -o call mvn versions:commit -o call mvn clean install -o :::http://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html cd ..\xyz-buildaggregate-ide call mvn -N versions:update-child-modules -o call mvn clean install -o
Il y a une option potentiellement mieux sur https://issues.apache.org/jira/browse/MNG-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabpanels:comment -tabpanel # commentaire-14415968
C'est une solution de contournement pour le fait que vous ne pouvez pas se référer à la pom de haut niveau dans les poms sous-module sans avoir une version explicite la liste. (Qui est ce bug MNG-624 est sur le point) Il explique comment vous pouvez avoir un seul emplacement pour la version (dans un fichier profiles.xml haut niveau), et ont tout simplement une des références de propriété dans tous les fichiers pom.xml (à savoir $ {} currentVersion)
Toutefois, dans le présent communiqué de schéma: préparer sera probablement pas mise à jour profiles.xml pour vous
.