Gibt es eine einfache Möglichkeit, nicht verwendete Abhängigkeiten aus einem Maven pom.xml zu entfernen?


277

Ich habe ein großes Maven-Projekt mit vielen Modulen und vielen pom.xmlDateien. Das Projekt hat sich geändert und ich vermute, dass die POMs einige unnötige Abhängigkeiten enthalten. Gibt es einen Befehl, der nicht verwendete Abhängigkeiten von einem POM entfernt?


2
Wenn Sie IntelliJ verwenden, sehen Sie dies: jonnyzzz.com/blog/2013/05/13/… Im Falle eines toten Links: Jonnyzzz Dependencies Plugin
Benj

3
@Benj Ich habe versucht, dieses Jonnyzz-Plugin zu verwenden, und es war nutzlos. Meistens werden keine nicht verwendeten Abhängigkeiten gefunden, und manchmal werden die Abhängigkeiten aus dem Klassenpfad entfernt, nicht aus der Datei build.gradle. Ich kann nicht einmal das richtige Dokument finden, um zu erklären, wie dieses Plugin tatsächlich funktioniert.
Vaibhav.g

@ vaibhav.g danke für das Update. Es scheint, dass sich die Dinge seit 2016 geändert haben.
Benj

Antworten:


222

Das Maven Dependency Plugin wird helfen, insbesondere das dependency:analyzeZiel:

dependency:analyzeanalysiert die Abhängigkeiten dieses Projekts und bestimmt, welche: verwendet und deklariert werden; gebraucht und nicht deklariert; unbenutzt und deklariert.

Eine weitere Möglichkeit zur Bereinigung ist der Abhängigkeitskonvergenzbericht aus dem Maven Project Info Reports Plugin .


5
Wie kann ich dies in Eclipse auslösen?
Daniil Shevelev

134
Seien Sie vorsichtig mit Abhängigkeiten: Analysieren Sie, einige zur Laufzeit verwendete Bibliotheken gelten als nicht verwendet.
Nereis

27
Um zu verhindern, dass die Laufzeit und die bereitgestellten Abhängigkeiten als nicht verwendet gemeldet werden, kann die ignoreNonCompileOption auf true gesetzt werden.
Sudeep

Seien Sie vorsichtig, wenn Sie Abhängigkeiten verwenden: Analysieren Sie, auch wenn ich 'ejp api3'depedency verwendet habe, aber der Bericht zeigte, dass es' unbenutzt und deklariert 'war
Akhil S Kamath

Informationen zum Verständnis der Analyseergebnisse finden Sie in der folgenden Antwort: "Verwendete nicht deklarierte Abhängigkeiten sind diejenigen, die erforderlich sind, aber in Ihrem Projekt nicht explizit als Abhängigkeiten deklariert wurden." - stackoverflow.com/questions/4565740/…
Janac Meena

49

Sie können verwenden dependency:analyze -DignoreNonCompile

Dadurch wird eine Liste von Druck verwendet nicht deklariert und nicht verwendeten deklarierten Abhängigkeiten (zu ignorieren runtime/ provided/ test/ systemBereiche für nicht genutzte Abhängigkeitsanalyse.)

Seien Sie vorsichtig, wenn Sie dies verwenden. Einige Bibliotheken, die bei verwendet runtimewerden, gelten als nicht verwendet!

Weitere Details finden Sie unter diesem Link


4
[plus] 1 für die Laufzeit Erwähnung!
Gaurav

1
Sie haben Recht, einige Laufzeitabhängigkeiten werden als nicht verwendet deklariert, aber tatsächlich benötigt.
Smart Coder

43

Wie bereits erwähnt, können Sie die Abhängigkeit verwenden: Ziel analysieren, um herauszufinden, welche Abhängigkeiten verwendet und deklariert, verwendet und nicht deklariert oder nicht verwendet und deklariert werden. Möglicherweise ist auch dependency: analyse-dep-mgt hilfreich, um in Ihrem Abschnitt dependencyManagement nach Nichtübereinstimmungen zu suchen.

Sie können unerwünschte direkte Abhängigkeiten einfach aus Ihrem POM entfernen. Wenn sie jedoch von Jars von Drittanbietern eingeführt werden, können Sie die <exclusions>Tags in einer Abhängigkeit verwenden, um die Jars von Drittanbietern auszuschließen ( Einzelheiten und einige Erläuterungen finden Sie im Abschnitt mit dem Titel Abhängigkeitsausschlüsse ). . Hier ist ein Beispiel, das die Commons-Protokollierung von der Spring-Abhängigkeit ausschließt:

<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) Ich habe das Jonnyzzz-Plugin verwendet, wie zu der Frage kommentiert. Schönes Plugin, funktioniert gut mit IntelliJ 2016.1.3
Benj

34

Haben Sie sich das Maven Dependency Plugin angesehen ? Dadurch werden keine Inhalte für Sie entfernt, es stehen jedoch Tools zur Verfügung, mit denen Sie die Analyse selbst durchführen können. Ich denke besonders an

mvn dependency:tree

1
Ausgezeichnet - danke (konnte nicht finden, wonach ich gesucht habe, da ich weiter nach "sauberen Abhängigkeiten" gesucht habe und das saubere Plugin

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.