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