Транзитивный эффект зависимости

В 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 является исключением, поскольку она ведет себя совершенно иначе, чем другие области.)