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?

Spodnie
źródło
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 .

Pascal Thivent
źródło
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

Saikat
źródło
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>
Bogaty sprzedawca
źródło
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
Brian Agnew
źródło
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ć)
14

Miałem podobny problem i postanowiłem napisać skrypt, który usunie dla mnie zależności. Korzystając z tego dość łatwo pozbyłem się ponad połowy zależności.

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

użytkownik 1132305
źródło
2
Uwaga: ten skrypt nie używa mvn dependency:analyze. Po prostu próbuje usunąć każdą zależność i sprawdza, czy mvn installdziała.
dieter