Что такое транзитивная зависимость Maven?

Этот вопрос должен прояснить, что такое транзитивная зависимость и как она работает на очень высоком уровне в Maven.

Мое определение: в дереве зависимостей, таком как A → B → C, C является транзитивной зависимостью для A. Предположим, что B имеет область компиляции в пределах A.

Если C имеет область компиляции внутри B, тогда объявление B как зависимости A достаточно для построения A с Maven. Но если C имеет область охвата внутри B, тогда, когда Maven строит A, здание не будет автоматически компилировать A против C, если A не объявит C среди своих зависимостей.

Правильно ли это?

Ответ 1

Ваше предположение верно.

Существует два типа зависимостей Maven:

  • Прямой:. Это зависимости, определенные в файле pom.xml в разделе <dependencies/>.

  • Transitive:. Это зависимости, которые зависят от ваших прямых зависимостей.

Зависимости с областью provided предназначены для:

  • Либо можно исключить из финального артефакта (например, для war файлов, которые вы бы не хотели включать servlet-api, servlet-jsp и т.д.)
  • Или переопределить - где проект, который наследует их, определяет версию и/или переопределяет область

Ответ 2

Зависимость, которая должна быть включена при объявлении самого проекта, является зависимостью