Что такое транзитивная зависимость 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
Зависимость, которая должна быть включена при объявлении самого проекта, является зависимостью