Czy istnieje prosty sposób na usunięcie nieużywanych zależności z maven pom.xml?


277

Mam duży projekt Maven z wieloma modułami i wieloma pom.xmlplikami. Projekt się zmienił i podejrzewam, że pom zawiera niepotrzebne zależności. Czy istnieje polecenie, które usuwa wszelkie nieużywane zależności z pom?


2
Jeśli używasz IntelliJ, zobacz to: jonnyzzz.com/blog/2013/05/13/… W przypadku martwego linku: wtyczka Jonnyzzz Dependencies
Benj

3
@Benj Próbowałem użyć tej wtyczki jonnyzz i było to bezużyteczne. Przez większość czasu nie znajdzie żadnych nieużywanych zależności, a czasami, gdy to zrobi, usunie zależności ze ścieżki klasy, a nie z pliku build.gradle. Nie mogę nawet znaleźć odpowiedniego dokumentu wyjaśniającego, jak ta wtyczka faktycznie działa.
vaibhav.g

@ vaibhav.g dzięki za aktualizację. Wygląda na to, że wszystko się zmieniło od 2016 roku.
Benj

Odpowiedzi:


222

Maven Zależność Plugin pomogą, zwłaszcza dependency:analyzecel:

dependency:analyzeanalizuje zależności tego projektu i określa, które są: używane i deklarowane; używane i niezgłoszone; nieużywany i zadeklarowany.

Kolejną rzeczą, która może pomóc w przeprowadzeniu czyszczenia, jest raport o zbieżności zależności z wtyczki Maven Project Info Reports .


5
Jak mogę uruchomić to w Eclipse?
Daniil Shevelev

134
Uważaj na zależność: analizuj, niektóre biblioteki używane w czasie wykonywania są uważane za nieużywane.
Nereis,

27
Aby zapobiec zgłaszaniu środowiska wykonawczego i podanych zależności jako nieużywanych, ignoreNonCompileopcję można ustawić na wartość true.
sudeep

bądź ostrożny podczas korzystania z zależności: analizuj, nawet ja używałem „ejp api3'depedency”, ale raport pokazał, że był „nieużywany i zadeklarowany”
Akhil S Kamath

Aby zrozumieć wyniki analizy, zapoznaj się z odpowiedzią: „Użyte niezadeklarowane zależności to te, które są wymagane, ale nie zostały wyraźnie zadeklarowane jako zależności w projekcie”. - stackoverflow.com/questions/4565740/…
Janac Meena

49

Możesz użyć dependency:analyze -DignoreNonCompile

Spowoduje to wydrukowanie listy używanych niezadeklarowanych i nieużywanych zadeklarowanych zależności (przy ignorowaniu zakresów runtime/ provided/ test/ systemdla nieużywanej analizy zależności).

Zachowaj ostrożność podczas korzystania z niej, niektóre używane biblioteki runtimesą uważane za nieużywane!

Aby uzyskać więcej informacji, zapoznaj się z tym linkiem


4
[plus] 1 za wzmiankę o środowisku uruchomieniowym!
gaurav

1
Masz rację, niektóre zależności środowiska wykonawczego są uznawane za nieużywane, ale w rzeczywistości potrzebne.
Smart Coder

43

Jak powiedzieli inni, możesz użyć zależności: przeanalizuj cel, aby dowiedzieć się, które zależności są używane i deklarowane, używane i niezadeklarowane lub nieużywane i deklarowane. Może się również przydać zależność: analiza-dep-mgt przydatna do wyszukiwania niezgodności w sekcji zarządzania zależnością.

Możesz po prostu usunąć niechciane bezpośrednie zależności z POM, ale jeśli są one wprowadzane przez słoiki stron trzecich, możesz użyć <exclusions>znaczników w zależności, aby wykluczyć słoiki stron trzecich (zobacz sekcję zatytułowaną Wykluczenia zależności, aby uzyskać szczegółowe informacje i trochę dyskusji) . Oto przykład wykluczający wspólne logowanie z zależności 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) Użyłem wtyczki Jonnyzzz, zgodnie z komentarzem do pytania. Ładna wtyczka, działa dobrze z IntelliJ 2016.1.3
Benj

34

Czy przeglądałeś wtyczkę Maven Dependency ? Nie usunie to dla ciebie rzeczy, ale ma narzędzia, które pozwolą ci przeprowadzić analizę samodzielnie. Mam na myśli szczególnie

mvn dependency:tree

1
Excellent - dzięki (nie mógł znaleźć to, czego szukałem jak Ciągle szukając „czystych” zależnościami i rzucał się na czystej wtyczki !! ale to wygląda obiecująco .. mvn zależność: analizować)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.