Чи є простий спосіб видалити невикористані залежності з maven pom.xml?


277

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


2
Якщо ви використовуєте IntelliJ, перегляньте це: jonnyzzz.com/blog/2013/05/13/… У разі мертвого посилання: плагін Jonnyzzz Dependitions
— Benj

3
@Benj Я намагався використовувати цей плагін jonnyzz, і це було марно. Більшу частину часу він не знайде невикористаних залежностей, а іноді, коли це буде, він видалить залежності зі шляху до класу, а не з файла build.gradle. Я навіть не можу знайти належного документа, щоб пояснити, як працює цей плагін насправді.
— vaibhav.g

@ vaibhav.g дякую за оновлення. Здається, все змінилося з 2016 року.
— Benj

Відповіді:


222

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

dependency:analyzeаналізує залежності цього проекту та визначає, які: використовуються та декларуються; використані та незадекларовані; невикористані та задекларовані.

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


5
Як я можу це запустити в Eclipse?
— Даніїл Шевельов

134
Будьте обережні з залежністю: проаналізуйте, що деякі бібліотеки, що використовуються під час виконання, вважаються невикористаними.
— Nereis

27
Щоб запобігти повідомленню часу виконання та наданих залежностей як невикористаних, ignoreNonCompileпараметр може бути встановлено на true.
— субота

будьте обережні, використовуючи залежність: проаналізуйте, навіть я використовував 'ejp api3' залежність, але звіт показав, що він "невикористаний та оголошений"
— Akhil S Kamath,

Щоб зрозуміти результати аналізу, дивіться цю відповідь: "Використовувані незадекларовані залежності - це ті, що потрібно, але явно не були оголошені залежностями у вашому проекті". - stackoverflow.com/questions/4565740 / ...
— Janac Meena

49

Можна використовувати dependency:analyze -DignoreNonCompile

Це буде друкувати список використовуваних неоголошені і невикористовувані оголошені залежностей (ігноруючи при цьому runtime/ provided/ test/ systemобластях для аналізу невикористаних залежностей.)

Будьте обережні , використовуючи це, деякі бібліотеки, які використовуються в runtime, вважаються невикористаними!

Більш детально ознайомтесь за цим посиланням


4
[плюс] 1 за час виконання!
— gaurav

1
Ви маєте рацію, що деякі залежності від часу виконання виконуються як невикористані, але насправді потрібні.
— Smart Coder

43

Як уже говорили інші, ви можете використовувати залежність: проаналізуйте мету, щоб знайти, які залежності використовуються та оголошуються, використовуються та невизначаються, або не використовуються та оголошуються. Ви також можете знайти залежність: analy-dep-mgt корисно шукати невідповідності у вашому розділі залежності.

Ви можете просто видалити небажані прямі залежності зі свого POM, але якщо вони введені сторонніми банками, ви можете використовувати <exclusions>теги в залежності, щоб виключити сторонні банки ( для деталей та деяких обговорень див. Розділ під назвою Виключення залежностей ) . Ось приклад, що виключає журнал обміну кодами з залежності від 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 ? Це не видалить матеріали для вас, але має інструменти, які дозволять вам робити аналіз самостійно. Я особливо думаю про це

mvn dependency:tree

1
Відмінно - спасибі (не вдалося знайти те, що я шукав, коли я продовжував шукати "чисті залежності", і це

14

У мене були подібні проблеми і вирішили написати сценарій, який знімає для мене залежності. Використовуючи це, я отримав понад половину залежностей досить легко.

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


2
Зауважте, цей сценарій не використовується mvn dependency:analyze. Він просто намагається усунути кожну залежність і перевіряє, чи mvn installпрацює.
— дієта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.