Есть ли простой способ удалить неиспользуемые зависимости из maven pom.xml?

277

У меня большой проект Maven со многими модулями и множеством pom.xmlфайлов. Проект изменился, и я подозреваю, что в нем есть некоторые ненужные зависимости. Есть ли команда, которая удаляет все неиспользуемые зависимости от pom?

штаны
источник
2
Если вы используете IntelliJ, посмотрите это: jonnyzzz.com/blog/2013/05/13/… В случае неработающей ссылки: плагин Jonnyzzz Dependencies
Benj
3
@Benj Я пытался использовать этот плагин jonnyzz, и он был бесполезен. В большинстве случаев он не находит неиспользуемые зависимости, а иногда, когда это происходит, удаляет зависимости из пути к классам, а не из файла build.gradle. Я даже не могу найти подходящий документ, чтобы объяснить, как на самом деле работает этот плагин.
vaibhav.g
@ vaibhav.g спасибо за обновление. Кажется, с 2016 года все изменилось.
Бендж

Ответы:

222

Maven зависимостей плагин поможет, особенно dependency:analyzeцели:

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

Еще одна вещь, которая может помочь выполнить некоторую очистку, - это отчет о конвергенции зависимостей из плагина Maven Project Info Reports .

Паскаль Тивент
источник
5
Как я могу вызвать это в Eclipse?
Даниил Шевелев
134
Будьте осторожны с зависимостями: проанализируйте, некоторые библиотеки, используемые во время выполнения, рассматриваются как неиспользуемые.
Nereis
27
Чтобы предотвратить ignoreNonCompileсоздание отчетов о времени выполнения и предоставленных зависимостях как неиспользуемых, для параметра можно установить значение true.
sudeep
будьте осторожны при использовании зависимости: проанализируйте, даже я использовал зависимость 'ejp api3', но отчет показал, что она была «неиспользована и объявлена»
Akhil S Kamath
Чтобы понять результаты анализа, посмотрите этот ответ: «Используются необъявленные зависимости, которые необходимы, но не были явно объявлены как зависимости в вашем проекте». - stackoverflow.com/questions/4565740/…
Янак Мина
49

Ты можешь использовать dependency:analyze -DignoreNonCompile

Это выведет список использованных необъявленных и неиспользованных объявленных зависимостей (при этом игнорируются области runtime/ provided/ test/ systemдля анализа неиспользованных зависимостей.)

Будьте осторожны при использовании этого, некоторые используемые библиотеки runtimeсчитаются неиспользованными!

Для более подробной информации обратитесь по этой ссылке

Saikat
источник
4
[плюс] 1 за упоминание времени выполнения!
Гаурав
1
Вы правы, некоторые зависимости во время выполнения объявляются как неиспользуемые, но фактически необходимые.
Smart Coder
43

Как уже говорили другие, вы можете использовать зависимость: проанализируйте цель, чтобы найти, какие зависимости используются и объявляются, используются и не декларируются, или не используются и объявляются. Вы также можете найти зависимость: analyse-dep-mgt полезной для поиска несоответствий в вашем разделе dependencyManagement.

Вы можете просто удалить нежелательные прямые зависимости из вашего POM, но если они представлены сторонними jar-файлами, вы можете использовать <exclusions>теги в зависимостях для исключения сторонних jar-файлов ( подробности и некоторые обсуждения см. В разделе « Исключения зависимостей» ). , Вот пример, исключающий использование общего журнала из зависимости Spring:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>
Богатый продавец
источник
3
(IntelliJ) Я использовал плагин Jonnyzzz, как прокомментировал вопрос. Хороший плагин, хорошо работает с IntelliJ 2016.1.3
Benj
34

Вы смотрели на Maven Dependency Plugin ? Это не удалит вещи для вас, но есть инструменты, которые позволят вам сделать анализ самостоятельно. Я думаю о

mvn dependency:tree
Брайан Агнью
источник
1
Отлично - спасибо (не смог найти то, что я искал, так как я продолжал искать «чистые зависимости», и он выбрасывал чистый плагин !!, но это выглядит многообещающе .. mvn dependency:
14

У меня была похожая проблема, и я решил написать сценарий, который удаляет зависимости для меня. Используя это, я довольно легко избавился от половины зависимостей.

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html

user1132305
источник
2
Обратите внимание, этот скрипт не использовать mvn dependency:analyze. Он просто пытается удалить все зависимости и проверяет, mvn installработает ли .
Дитер