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

Какие неиспользуемые/незадекларированные зависимости в Maven? Что с ними делать?

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Ответ на:

"Как определить, какие неиспользуемые и незаявленные?".

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

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