Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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. (*)

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