Что такое неиспользуемые / необъявленные зависимости в 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

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

2   51   2010-12-30 22:47:28

2 ответа:

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

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

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

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

ответ:

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

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

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