Я пытался переопределить версию транзитивной зависимости в одном из моих проектов. Я нашел следующий образец проекта на github для экспериментов ( https://github.com/Richou/swagger-codegen-maven-plugin). Родительский pom этого проекта содержит зависимость для swagger-codegen. Swagger-codegen, в свою очередь, имеет зависимость slf4j-ext версии 1.6.3. Я хочу обновить/переопределить версию slf4j-ext до 1.7.30 из родительского pom. Я попытался добавить требуемую версию slf4j внутри тега свойств в родительском pom, но это не сработало, когда я проверил дерево зависимостей maven. Каков правильный метод сделать это?
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen</artifactId>
<version>2.1.2</version>
</dependency>
</dependencies>
<properties>
<slf4j-version>1.7.30</slf4j-version>
<java.version>1.7</java.version>
</properties>
Вы можете добавить slf4j-ext с нужной вам версией в разделе dependencyManagement вашего родительского файла pom.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>${slf4j-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
Что вы подразумеваете под "иногда этого может быть недостаточно"? <dependencyManagement>
переопределяет транзитивные зависимости.
Вы правы, я отредактировал свой ответ, чтобы удалить эту часть.
<dependencyManagement> работает, но может ли кто-нибудь сказать мне, почему переопределение версии внутри <properties> в родительском pom не работает? Я хочу лучше понять, как работает pom.
Поскольку свойства, которые вы определяете в своем pom, не применяются к вашим зависимостям, они применяются только к вашему pom и подмодулям. Другими словами, невозможно переопределить свойство, определенное в зависимости.
есть ли причина, по которой переопределение свойства не работает?