Управляемые зависимости 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.
Ответы
Ответ 1
Вам нужно пропустить тег <version>
в child, но сохраните тег <parent><version> ... </parent>
.
http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance
Следует отметить, что эти переменные обрабатываются после наследование, как указано выше. Это означает, что если родительский проект использует переменную, то ее определение в дочернем, а не в родительском, будет в конечном итоге использоваться.