Чи є простий спосіб видалити невикористані залежності з 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.