Как лучше изменить версию транзитивной зависимости в maven?

Ссылка скопирована
1 ответ

Всем доброго времени!
По вводным: пытаюсь подружить проект наSpring boot версии 3.5.7По вводным: с корпоративным репозиторием.
Проблема сSpring-boot-maven-pluginОн тянет транзитивноCommons-lang3:3.16.0Нужно понять: а он запрещен в моем репозитории, возвращается статус 403 и сборка падает... Как мне поднять commons-lang3 до версии 3.20.0?
Пытаюсь сделать вот так:

<pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.5.7</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-buildpack-platform</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.28.0</version> <exclusions> <exclusion> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.20.0</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement>

Выдает ошибку

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.5.7:repackage (repackage) on project demo1: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:3.5.7:repackage failed: Plugin org.springframework.boot:spring-boot-maven-plugin:3.5.7 or one of its dependencies could not be resolved: Failed to collect dependencies at org.springframework.boot:spring-boot-maven-plugin:jar:3.5.7 -> org.springframework.boot:spring-boot-loader-tools:jar:3.5.7 -> org.apache.commons:commons-compress:jar:1.27.1 -> org.apache.commons:commons-lang3:jar:3.16.0: Failed to read artifact descriptor for org.apache.commons:commons-lang3:jar:3.16.0: The following artifacts could not be resolved: org.apache.commons:commons-lang3:pom:3.16.0 (absent): Could not transfer artifact org.apache.commons:commons-lang3:pom:3.16.0 from/to rt-central (https://company-repository.ru/repository/maven-repo.maven.apache.org): status code: 403, reason phrase: Forbidden (403) -> [Help 1]

Буду признателен любым советам!

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

В Maven версию транзитивной зависимости лучше менять через dependencyManagement, а не добавлять случайную прямую зависимость без понимания дерева. dependencyManagement позволяет зафиксировать версию, которую Maven будет использовать, когда эта библиотека приходит транзитивно.

Сначала посмотрите дерево зависимостей:

mvn dependency:tree -Dincludes=groupId:artifactId

mvn dependency:tree -Dincludes=groupId:artifactId

Затем в родительском pom.xml или в pom модуля добавьте управление версией:

&lt;dependencyManagement&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;com.example&lt;/groupId&gt;
      &lt;artifactId&gt;library&lt;/artifactId&gt;
      &lt;version&gt;1.2.3&lt;/version&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;

&lt;dependencyManagement&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;com.example&lt;/groupId&gt; &lt;artifactId&gt;library&lt;/artifactId&gt; &lt;version&gt;1.2.3&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/dependencyManagement&gt;

Если используется Spring Boot, лучше учитывать BOM. Boot сам управляет версиями многих зависимостей. Переопределять их можно, но нужно понимать совместимость. Иногда правильнее обновить версию Spring Boot, чем вручную поднимать одну библиотеку.

Если конфликтует конкретная транзитивная зависимость, можно исключить её у источника и добавить нужную версию явно:

&lt;exclusions&gt;
  &lt;exclusion&gt;
    &lt;groupId&gt;com.example&lt;/groupId&gt;
    &lt;artifactId&gt;bad-lib&lt;/artifactId&gt;
  &lt;/exclusion&gt;
&lt;/exclusions&gt;

&lt;exclusions&gt; &lt;exclusion&gt; &lt;groupId&gt;com.example&lt;/groupId&gt; &lt;artifactId&gt;bad-lib&lt;/artifactId&gt; &lt;/exclusion&gt; &lt;/exclusions&gt;

После изменения проверьте дерево снова и запустите тесты. Maven может выбрать не ту версию из-за nearest definition wins, особенно в multi-module проектах.

Итог: сначала dependency:tree, затем dependencyManagement. Exclusion используйте точечно. В Spring Boot проектах не ломайте BOM без причины: если переопределяете версию, обязательно проверьте совместимость и тесты.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно