2015-05-18 2 views
3

Я борюсь с mvn dependency:analyze. Я не мог заставить плагин работать с реакторной сборкой. Вместо того, чтобы рекурсивно создавать список используемых зависимостей, я вижу неиспользуемые зависимости для каждого модуля, который довольно бесполезен. Предположим, у меня есть два модуля A и B, где B зависит от A. A зависит от commons-email.Как я могу найти неиспользуемые зависимости в сборке реактора Maven?

Плагин зависимость говорит мне, что commons-email является «неиспользуемой объявлено зависимостью» от B, которую я не понимаю: Зависимость не упоминается в POM из B и используются в A, так что сообщение является неправильным, как бы я ни смотрел на нее. Кроме того, я не получаю это сообщение за A, поэтому плагин знает, что A использует зависимость.

Кроме того, я получаю тонну «используемых незаявленных зависимостей» - одно предупреждение для каждой транзитивной зависимости.

Есть ли способ настроить плагин зависимостей для предоставления некоторой полезной информации? Если нет, есть ли замена, которая может вычислить «выпуклую оболочку» всего доступного импорта?

ответ

1

Что касается неиспользуемой заявленной зависимости, вы можете наследовать ее от родительского пом.

Относительно используемых незаявленных зависимостей для транзитивных зависимостей: если вы напрямую ссылаетесь на какой-либо класс из транзитивной зависимости в модуле - например, в импорте - тогда модуль должен объявлять прямую зависимость, даже если есть уже транзитивная зависимость. предоставить версии для всех ваших Используйте управление зависимостями в родительском pom для всех ваших зависимостей вместо того, чтобы снова и снова объявлять версии во всех ваших модулях.

+0

Я уже использую элементы управления depenendency в родительской POM. Но я действительно не вижу смысла дублировать все транзитивные зависимости во всех моих 500 POM. У меня есть «интерфейсные модули», которые упрощают сбор внешнего кода (= зависимостей) для моих проектов. Повторение транзитивных зависимостей в моих POM, которые используют интерфейсные модули, кажется огромной тратой времени (и нарушением DRY). У вас есть доказательства или ссылки, подтверждающие вашу позицию? –

+0

Учитывайте, что вы обновляете зависимость X от v1 до v2. В v1 X транзитивно зависел от A, но в v2 он больше не делает этого. Однако ваш код напрямую использует A. Он все равно будет компилироваться, если бы у вас была зависимость от A, даже после обновления X, но, поскольку у вас нет зависимости от A, она ломается. Как я вижу, открытый API модуля - это только * общедоступные классы этого модуля (если только в некотором «внутреннем» пакете), а не транзитивные зависимости модуля. Это может быть вопрос вкуса/конвенции. OSGi позволяет сделать это более явным, но обычные JAR-файлы этого не делают, поэтому я склонен быть консервативным. – rec

+0

Хорошо, теперь это начинает иметь больше смысла. У меня не было этого случая (чаще всего зависимость приносит больше в таблицу, чем я хотел (например, многие пакеты «commons», которые были перемещены в «org.apache.commons»), и я неожиданно обнаружил две копии в моем пути к классам Я не помню, чтобы когда-либо отсутствовала зависимость после обновления версии, но, скорее всего, я мог бы устранить проблему настолько легко, что она не застряла в моей памяти. –

Смежные вопросы