Транзитивный эффект зависимости
В Maven вы можете переопределить номер версии транзитивной зависимости посредством записи в dependencyManagement, поскольку dependencyManagement имеет приоритет над определениями транзитивной зависимости.
Но как насчет зависимостей определения управления в потах (транзитивных) зависимостей? Рассматриваются ли они вообще? Если да, то что они переопределяют, как они переопределяются?
Ответы
Ответ 1
dependency Определения управления в poms транзитивных зависимостей рассматриваются до тех пор, пока они не будут переопределены в зависимости от управления вашим проектом или более близкой зависимостью (в дереве зависимостей).
другими словами,
Зависимость посредничества: правило легко
-
"ближайшее определение" означает, что он будет использовать версию ближайшей зависимости от вашего проекта в дереве зависимостей.
-
если две версии зависимостей находятся на одной и той же глубине в дереве зависимостей, первое объявление выигрывает (порядок объявления).
для более подробной информации см. Transitive Dependency
надеюсь это поможет.
Ответ 2
Управление зависимостями подразумевается переходным. Для этого не обязательно быть специальным правилом, а скорее следствием уже упомянутых правил: Transitive Dependencies.
Рассмотрим эту примерную структуру:
- ваш модуль
-
A
- зависимость -
D
- транзитивная зависимость
-
B
- зависимость -
D
- транзитивная зависимость
Когда A
или B
построены, их соответствующая секция dependencyManagement
проверяется на выбор версии для D
, если она явно не указана. Здесь важная часть: точно такой же процесс используется, когда A
или B
используются в качестве зависимостей, чтобы определить, от какой версии D
они зависят. Следовательно, они никак не влияют друг на друга.
Это может произойти, например, в A
зависимости от D:1.0
и B
зависимости от D:1.1
, их секции управления dependencyManagement
уже были применены в этой точке, чтобы определить это и больше не будут учитываться. С этой информацией в качестве входных данных применяются правила посредничества зависимостей, чтобы выбрать только одну версию D
для вашего модуля.
Правила медиации зависимостей также описаны на связанной странице. Но в двух словах, ближайшее определение выигрывает, и связи нарушаются по порядку. Естественно, определения в вашем модуле всегда самые близкие.
Теперь скажем, что ваш модуль используется как зависимость. Ваш проект может зависеть от D:1.2
на основе всех вышеизложенных правил из-за определения в разделе dependencyManagement
, но там, где заканчивается область вашего управления dependencyManagement
.
(Обратите внимание, что область import
является исключением, поскольку она ведет себя совершенно иначе, чем другие области.)