Автоматически принимает новейшие переходные зависимости в Maven - PullRequest
2 голосов
/ 04 мая 2020

Рассмотрим очень распространенную ситуацию, когда проект зависит от 2-х библиотек, каждая из которых транзитивно приносит 3-ю библиотеку разных версий:

Project A:
    Library B:
        Library D: version 1
    Library C:
        Library D: version 2

Я могу использовать правило зависимостей конвергента для подключаемого модуля maven * обнаружить такие проблемы, а затем напрямую указать версию библиотеки D в pom моего Project A, например, в разделе .

Но это создает еще одну проблему: теперь мне приходится вручную отслеживать версию библиотеки D, даже если мой Проект не использует его напрямую.
Каждый раз, когда я изменяю версию библиотеки B или библиотеки C, я должен помнить, что нужно также обновить версию библиотеки D в моем проекте. Это очень легко забыть!

Есть ли способ сказать maven просто использовать новейшую версию переходной библиотеки?
Что-то вроде:

<dependencyManagement>
    ...
    <dependency>
        <groupId>path.to</groupId>
        <artifactId>library-D</artifactId>
        <version>
            <use_newest_one_from_all_transitive_dependencies_please/>
        </version>
    </dependency>

Есть ли способ достичь этого?

1 Ответ

2 голосов
/ 07 мая 2020

Нет, как уже сказал Хмарбайз, это невозможно.

Правило разрешения глубоко заложено в самом Maven. Вы можете проверить результат разрешения (как вы уже упоминали), но вы не можете изменить его.

Мы решили исправить почти все версии переходных зависимостей, используя соответствующие спецификации (списки зависимостейManagement), которые мы import в разделе <dependencyManagement>. Это гарантирует, что все зависимости появятся в последних версиях. Это не гарантирует, что все сходится. Но использование новейшей версии в качестве стандарта также не приведет к этому.

...