Maven: Должен ли я хранить или удалять объявленные зависимости, которые также являются транзитными зависимостями?
Считаете ли вы, что это хорошая практика, чтобы удалить все транзитивные зависимости, которые можно найти в maven pom?
Пример:
Мой проект зависит от A и B.
B также является транзитивной зависимостью A.
Должен ли я держать B в моем пом или удалить его?
Что самое лучшее:
имея все известные банки, даже переходные, заявленные на помпе или содержащие только верхние банки уровня?
Это немного субъективно, но я пытаюсь очистить некоторые огромные поры (родители и дети) с большим количеством транзитивных зависимостей. Я хочу, чтобы мой pom был как можно более простым, но я хочу, чтобы они тоже были подтянуты.
Ответы
Ответ 1
Если ваш проект имеет прямые зависимости от B, то вы должны сохранить его, даже если B является транзитивной зависимостью A. Возможно, что в следующей версии A не будет использовать B, вам придется реструктурировать pom. XML.
Как правило, зависимости Maven должны отражать зависимости логических проектов.
Ответ 2
Я бы предпочел избегать объявления транзитивных зависимостей и явно включать их в pom them, если для этого есть веская причина. Вот мои аргументы:
- Я пытаюсь держать pom как можно проще. При объявлении транзитивных зависимостей, даже если они используются явно, Maven pom становится более подробным.
Объявляя транзитивные зависимости (даже если они явно нужны):
-
Введена избыточность в объявлении, потому что эта информация уже находится в дескрипторе pom необходимого артефакта.
-
Если новая версия требуемого артефакта больше не зависит от transitive dependency
, вы должны сами удалить transitive dependency
из своей сборки, если явно указано transitive dependency
.
-
Информация для транзитивности управляется декларацией транзитивной зависимости явно.
Было бы полезно включить явную зависимость явно в следующем случае:
- У вас есть две зависимости, например
C
и D
, для которых требуются разные версии транзитивной зависимости B
(или вам нужна конкретная версия B
в вашем проекте). В этом случае вам нужно выбрать версию B
и явно определить транзитивную зависимость T
. (*)
Заключение:
Я попытался бы избежать объявления, если не имеет смысла объявлять артефакт конкретно (например, в случае (*)).