Maven: Должен ли я сохранить или удалить объявленные зависимости, которые также являются транзитивными? - PullRequest
24 голосов
/ 19 ноября 2010

Как вы думаете, это хорошая практика, чтобы удалить все переходные зависимости, которые можно найти в maven pom?

Пример:
Мой проект зависит от А и Б.
B также является транзитивной зависимостью A.
Должен ли я держать B в моем помпе или удалить его?

Что лучше:
иметь все известные банки, даже транзитные, на помпе или хранить только банки верхнего уровня?

Это немного субъективно, но я пытаюсь очистить некоторые огромные помпы (родительские и дочерние) с множеством переходных зависимостей. Я хочу, чтобы мой помпон был настолько простым, насколько это возможно, но я также хочу, чтобы его можно было обслуживать.

Ответы [ 2 ]

22 голосов
/ 19 ноября 2010

Если ваш проект имеет прямые зависимости от B, то вы должны сохранить его, даже если B является транзитивной зависимостью от A. Возможно, в следующей версии A не будет использоваться B a, вам придется реструктурировать pom.xml.

Как правило, зависимости Maven должны отражать логические зависимости проекта.

12 голосов
/ 10 ноября 2011

Я бы предпочел бы от до избегать объявления переходных зависимостей и явно включать их в pom, если для этого есть веские основания.Вот мои аргументы:

  • Я пытаюсь сделать пом как можно проще .С объявленными транзитивными зависимостями, даже если они используются явно, помп Maven становится более многословным.

Объявляя транзитивные зависимости (даже если они вам явно необходимы):

  • Избыточность в объявлении введена , поскольку эта информация уже содержится в дескрипторе pom артефакта , который требуется .

  • Если новая версия необходимого артефакта больше не зависит от transitive dependency, вам придется самостоятельно удалить transitive dependency из вашей сборки, если это transitive dependency явно объявлено.

  • Информация о транзитивности обрабатывается путем явного объявления транзитивной зависимости.

Имеет смысл явно включить зависимость в следующем случае:

  • У вас есть одна зависимость, скажем, C и D, для которых требуются разные версии транзитивной зависимости B (или вам нужна конкретная версия B в вашем проекте).В этом случае вам нужно выбрать версию B и явно определить транзитивную зависимость T.(*)

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

...