253 votes

Héritage de la version du projet Maven - dois-je spécifier la version parent ?

J'ai deux projets : Projet parent : A, Sous-projet : B

A/pom.xml :

<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>

Et dans B/pom.xml, j'ai :

    <parent>
        <groupId>com.dummy.bla</groupId>
        <artifactId>parent</artifactId>
        <version>0.1-SNAPSHOT</version>     
    </parent>

    <groupId>com.dummy.bla.sub</groupId>
    <artifactId>kid</artifactId>

Je veux que B hérite de la version du parent, donc le seul endroit dans mon cas où j'ai besoin de mettre 0.1-SNAPSHOT es A/pom.xml . Mais si je supprime le <version>0.1-SNAPSHOT</version> de B/pom.xml sous la section parent, maven se plaint de la version manquante pour le parent.

Y a-t-il un moyen pour que je puisse simplement utiliser ${project.version} ou quelque chose comme ça pour éviter d'avoir 01.-SNAPSHOT dans les deux poms ?

5 votes

Vous devrez attendre la version 3.1 de Maven pour cela, j'en ai peur.

3 votes

0 votes

21voto

Jerry Jin Points 21

Vous pourriez aussi utiliser :

$ mvn release:update-versions -DdevelopmentVersion={version}

pour mettre à jour les numéros de version dans vos POMs.

14voto

LeoLozes Points 746

eFox La réponse de l'auteur a fonctionné pour un seul projet, mais pas lorsque je faisais référence à un module d'un autre projet (les pom.xml étaient toujours stockés dans mon fichier .m2 avec la propriété au lieu de la version).

Cependant, il fonctionne si vous le combinez avec la fonction flatten-maven-plugin car il génère les poms avec la version correcte, et non la propriété.

La seule option que j'ai modifiée dans la définition du plug-in est l'option outputDirectory il est vide par défaut, mais je préfère l'avoir en target qui se trouve dans mon .gitignore configuration :

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>flatten-maven-plugin</artifactId>
   <version>1.0.1</version>
   <configuration>
      <updatePomFile>true</updatePomFile>
      <outputDirectory>target</outputDirectory>
   </configuration>
   <executions>
      <execution>
         <id>flatten</id>
         <phase>process-resources</phase>
         <goals>
            <goal>flatten</goal>
         </goals>
      </execution>
   </executions>
</plugin>

La configuration du plug-in se trouve dans le fichier pom.xml parent

3voto

Hleb Turchyk Points 21

Utilisez mvn -N versions:update-child-modules pour mettre à jour la version du pom's enfant

https://www.mojohaus.org/versions-maven-plugin/examples/update-child-modules.html

0voto

Yu Chai Points 47
<parent>
    <groupId>com.dummy.bla</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>     
 </parent>

 <groupId>com.dummy.bla.sub</groupId>
 <artifactId>kid</artifactId>

Vous voulez dire que vous voulez supprimer la version du bloc parent du pom de B, je pense que vous ne pouvez pas le faire, le groupId, artifactId, et la version spécifient les coordonnées du pom parent, ce que vous pouvez omettre est la version de l'enfant.

0voto

It worked for me using BOM approach on parent pom.xml: 

My scenario:
 - parent pom.xml 0.0.0.1-SNAPSHOT
 - sub-project1
 - sub-project2 (sub-project1 is a dependency)

<properties>        
    <revision>0.0.0.1-SNAPSHOT</revision>        
</properties>

<groupId>com.example</groupId>
<artifactId>commons</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<name>commons</name>
<description>parent module of commons project</description>

<modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
</modules>

<dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <type>pom</type>
            <version>2.6.4</version>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>com.example.commons</groupId>
            <artifactId>sub-project1</artifactId>
            <version>${revision}</version>
        </dependency>
    </dependencies>

</dependencyManagement>

Le pom.xml du sous-projet peut hériter du numéro de ${revision} du parent et la dépendance listée n'a pas besoin d'avoir une balise explicitement mentionnée.

    <parent>
        <groupId>com.example</groupId>
        <artifactId>commons</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.example.commons</groupId>
    <artifactId>sub-project2</artifactId>
    <version>${revision}</version>
    <name>sub-project2</name>
    <description>implement sub-project2 </description>

    <dependencies>  
        <dependency>
            <groupId>com.example.commons</groupId>
            <artifactId>sub-project1</artifactId>           
        </dependency>

    </dependencies>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X