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?

Hose
quelle
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 .

Pascal Thivent
quelle
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

Saikat
quelle
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>
Reicher Verkäufer
quelle
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
Brian Agnew
quelle
1
Ausgezeichnet - danke (konnte nicht finden, wonach ich gesucht habe, da ich weiter nach "sauberen Abhängigkeiten" gesucht habe und das saubere Plugin
14

Ich hatte ein ähnliches Problem und beschloss, ein Skript zu schreiben, das Abhängigkeiten für mich beseitigt. Damit habe ich ziemlich leicht mehr als die Hälfte der Abhängigkeiten beseitigt.

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

user1132305
quelle
2
Beachten Sie, dass dieses Skript nicht verwendet wird mvn dependency:analyze. Es wird nur versucht, jede Abhängigkeit zu entfernen und zu prüfen, ob dies mvn installfunktioniert.
Dieter