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, (*)

Вывод: я бы попытался избежать объявления, если нет смысла объявлять артефакт конкретно (как в случае (*)).

Другие вопросы по тегам