Я борюсь с mvn dependency:analyze
. Я не мог заставить плагин работать с реакторной сборкой. Вместо того, чтобы рекурсивно создавать список используемых зависимостей, я вижу неиспользуемые зависимости для каждого модуля, который довольно бесполезен. Предположим, у меня есть два модуля A
и B
, где B
зависит от A
. A
зависит от commons-email
.Как я могу найти неиспользуемые зависимости в сборке реактора Maven?
Плагин зависимость говорит мне, что commons-email
является «неиспользуемой объявлено зависимостью» от B
, которую я не понимаю: Зависимость не упоминается в POM из B
и используются в A
, так что сообщение является неправильным, как бы я ни смотрел на нее. Кроме того, я не получаю это сообщение за A
, поэтому плагин знает, что A
использует зависимость.
Кроме того, я получаю тонну «используемых незаявленных зависимостей» - одно предупреждение для каждой транзитивной зависимости.
Есть ли способ настроить плагин зависимостей для предоставления некоторой полезной информации? Если нет, есть ли замена, которая может вычислить «выпуклую оболочку» всего доступного импорта?
Я уже использую элементы управления depenendency в родительской POM. Но я действительно не вижу смысла дублировать все транзитивные зависимости во всех моих 500 POM. У меня есть «интерфейсные модули», которые упрощают сбор внешнего кода (= зависимостей) для моих проектов. Повторение транзитивных зависимостей в моих POM, которые используют интерфейсные модули, кажется огромной тратой времени (и нарушением DRY). У вас есть доказательства или ссылки, подтверждающие вашу позицию? –
Учитывайте, что вы обновляете зависимость X от v1 до v2. В v1 X транзитивно зависел от A, но в v2 он больше не делает этого. Однако ваш код напрямую использует A. Он все равно будет компилироваться, если бы у вас была зависимость от A, даже после обновления X, но, поскольку у вас нет зависимости от A, она ломается. Как я вижу, открытый API модуля - это только * общедоступные классы этого модуля (если только в некотором «внутреннем» пакете), а не транзитивные зависимости модуля. Это может быть вопрос вкуса/конвенции. OSGi позволяет сделать это более явным, но обычные JAR-файлы этого не делают, поэтому я склонен быть консервативным. – rec
Хорошо, теперь это начинает иметь больше смысла. У меня не было этого случая (чаще всего зависимость приносит больше в таблицу, чем я хотел (например, многие пакеты «commons», которые были перемещены в «org.apache.commons»), и я неожиданно обнаружил две копии в моем пути к классам Я не помню, чтобы когда-либо отсутствовала зависимость после обновления версии, но, скорее всего, я мог бы устранить проблему настолько легко, что она не застряла в моей памяти. –