J'ai un projet multi-modules.
parent POM (1.0-INSTANTANÉ) | - module1 (1.0-INSTANTANÉ) | - module2 (1.0-INSTANTANÉ) `- module3 ( 1.0-INSTANTANÉ)
Lorsque j'exécute la version mvn: préparez-la, vérifiez que le POM parent a une version SNAPSHOT et que tous les modules dépendants n'ont pas de version SNAPSHOT. Comment mettre à jour automatiquement tous les modules enfants de SNAPSHOT vers la prochaine version?
Je voudrais incrémenter automatiquement la version pour tous les modules.
Le plugin de publication peut gérer cela. Avez-vous vérifié Mise à jour des versions de POM ? Mais ... je n'ai rien. Changer la version des POM de x-SNAPSHOT en une nouvelle version et remplacer la version des POM par une nouvelle valeur y-SNAPSHOT doit être fait par release:prepare
comme expliqué dans Préparer une version . Qu'est-ce qui ne va pas lorsque vous utilisez cet objectif?
Mise à jour: Le paramètre autoVersionSubmodules
pourrait être ce que vous recherchez. À partir de l'exemple Préparer une version :
Projets multi-modules
Vous serez invité à entrer le numéro de version de chaque module du projet. Si vous préférez que chaque module ait la même version que le POM parent, vous pouvez définir l'option
autoVersionSubmodules
surtrue
. Maintenant, il ne vous sera demandé qu'une seule fois la version finale et la prochaine version de développement.
<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>
Une manière flexible de définir les versions de poms, projets multi-modules inclus, est Versions Maven Plugin .
mvn versions:set -DnewVersion=your_new_version
Il ajustera toutes les versions de pom, les versions parent et les versions enfants dans un projet multi-module.
ensuite
mvn versions:commit
ou
mvn versions:revert
Assurez-vous que toutes les versions des sous-projets sont identiques à la version de leur parent.
<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éez un autre pom.xml pour regrouper ces projets.
<modules>
<module>../xyz-parent</module>
<module>../module-1</module>
<module>../module-2</module>
</modules>
Mettez ensuite à jour la version du projet parent, puis générez-la à l'aide de la commande ci-dessous.
mvn versions:set -DnewVersion=1.0.1004-SNAPSHOT
mvn clean install
Ensuite, mettez à jour la version du parent qui est définie dans ces sous-projets vers celle du latset
mvn -N versions:update-child-modules
Ensuite, construisez-les 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 existe une option potentiellement meilleure sur https://issues.Apache.org/jira/browse/MNG-624?focusedCommentId=14415968&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel# comment-14415968
C'est une solution de contournement pour le fait que vous ne pouvez pas faire référence au pom de niveau supérieur dans les poms de sous-module sans avoir une version explicite répertoriée. (qui concerne le bug MNG-624) Il explique comment vous pouvez avoir un seul emplacement pour la version (dans un fichier profiles.xml de niveau supérieur), et simplement avoir une référence de propriété dans tous les fichiers pom.xml (c'est-à-dire $ {currentVersion})
Cependant, dans cette version du schéma: prepare ne mettra probablement pas à jour profiles.xml pour vous.