web-dev-qa-db-fra.com

Dépendances gérées par Maven - Résolution de $ {project.version} à partir du pom parent

Comment est l'espace réservé ${project.version} résolu pour les propriétés gérées du parent pom? Je m'attendais à ce qu'il soit résolu globalement, donc lorsque le pom parent a la version 2, ${project.version} serait également résolu en version 2.

Dans le pom parent, j'ai:

<groupId>my.group</groupId>
<artifactId>parent</artifactId>
<version>2</version>
<packaging>pom</packaging>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>my.group</groupId>
            <artifactId>dep</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>     

Chez l'enfant j'utilise

<parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>2</version>
</parent>
<version>1</version>
<artifactId>child</artifactId>

Mais l'artefact my.group.dep.1.jar est utilisé, au lieu de my.group.dep.2.jar. Ainsi, l'espace réservé est résolu dans la version du projet en utilisant la dépendance gérée, et non dans celles du projet en définissant la dépendance.

Est-ce un comportement attendu? J'utilise maven 3.0.4.

37
Danubian Sailor

Vous devez ignorer <version> tag dans l'enfant, mais conservez le <parent><version> ... </parent> tag.

http://maven.Apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

Un facteur à noter est que ces variables sont traitées après l'héritage comme indiqué ci-dessus. Cela signifie que si un projet parent utilise une variable, sa définition dans l'enfant, et non dans le parent, sera celle finalement utilisée.

34
Terafor