Что такое неиспользованные / необъявленные зависимости в Maven?Что с ними делать? - PullRequest
57 голосов
/ 30 декабря 2010

Maven dependency:analyze жалуется на зависимости в моем проекте. Как он определяет, какие не используются, а какие не объявлены? Что мне с ними делать?

Пример:

$ mvn dependency:analyze 
...
[WARNING] Used undeclared dependencies found:
[WARNING]    org.slf4j:slf4j-api:jar:1.5.0:provided
[WARNING]    commons-logging:commons-logging:jar:1.1.1:compile
[WARNING]    commons-dbutils:commons-dbutils:jar:1.1-osgi:provided
[WARNING]    org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile

...
[WARNING] Unused declared dependencies found:
[WARNING]    commons-cli:commons-cli:jar:1.0:compile
[WARNING]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING]    org.apache.httpcomponents:httpclient:jar:4.0-alpha4:compile
[WARNING]    commons-collections:commons-collections:jar:3.2:provided
[WARNING]    javax.mail:mail:jar:1.4:provided

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

Ответы [ 2 ]

70 голосов
/ 31 декабря 2010

Не уверен, как Maven определяет это.Нет необходимости обращаться ко всем элементам, о которых сообщается, но эту информацию можно использовать по мере необходимости.

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

Что касается неиспользованных объявленных зависимостей , то будет хорошей идеей удалить их.Зачем добавлять ненужные зависимости в ваш проект?Но тогда транзитивность может внести их в любом случае, возможно, конфликтуя с вашими версиями времени выполнения.В этом случае вам нужно будет указать их - по существу, для управления version.

. Кстати, mvn dependency:tree дает дерево зависимостей проекта, которое дает вамлучшая перспектива того, как каждая зависимость вписывается в ваш проект.

5 голосов
/ 05 мая 2017

Ответ на вопрос:

«Как он определяет, какие не используются, а какие не объявлены?».

Maven использует Object WebASM framework, который анализирует ваш необработанный байт-код.Он проходит через все ваши классы и затем строит список всех классов, на которые они ссылаются.Вот как.

Что касается того, что делать, я бы не рекомендовал удалять «неиспользованные, объявленные зависимости», если вы не уверены, что они на самом деле не используются.

...