web-dev-qa-db-fra.com

Dans un projet Maven, comment puis-je mettre à jour automatiquement la version de tous les modules enfants, plus le parent?

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.

33
eugenn

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 sur true. Maintenant, il ne vous sera demandé qu'une seule fois la version finale et la prochaine version de développement.

Extrait du 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>
30
Pascal Thivent

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
26
aymens
  1. Définissez la version de tous les sous-projets dans son parent pom.xml.
  2. 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>
    
  3. Créez un autre pom.xml pour regrouper ces projets.

    <modules>   
      <module>../xyz-parent</module>
      <module>../module-1</module>
      <module>../module-2</module>      
    </modules>
    
  4. 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
    
  5. 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
    
  6. 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
    
6
user3571276

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.

3
Eric