Подтвердить что ты не робот

Управляемые зависимости Maven - разрешение ${project.version} от родительского pom

Как заменяется placeholder ${project.version} для управляемых свойств из родительского pom? Я ожидал, что он будет разрешен глобально, поэтому, когда родительский pom имеет версию 2, ${project.version} также будет разрешен к версии 2.

В родительском pom я:

<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>     

В дочернем я использую

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

Но вместо my.group.dep.2.jar используется артефакт my.group.dep.1.jar. Таким образом, местозаполнитель разрешен для версии проекта с использованием управляемой зависимости, а не для проекта определения зависимости.

Это ожидаемое поведение? Я использую maven 3.0.4.

4b9b3361

Ответ 1

Вам нужно пропустить тег <version> в child, но сохраните тег <parent><version> ... </parent>.

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

Следует отметить, что эти переменные обрабатываются после наследование, как указано выше. Это означает, что если родительский проект использует переменную, то ее определение в дочернем, а не в родительском, будет в конечном итоге использоваться.