Wie man in Maven auf Bibliothekskonflikte prüft
Datum der Veröffentlichung:
Aktualisiert:
Fachartikel > Wie man in Maven auf Bibliothekskonflikte prüft
Status 2026 und sichere Verwendung
Schlussfolgerung: Führen Sie mvn dependency:tree aus, um das aufgelöste Diagramm zu überprüfen und dann zu ermitteln, welcher Pfad die unerwartete Version eingeführt hat. Korrigieren Sie die Deklaration bewusst mit einer aktualisierten direkten Abhängigkeit, dependencyManagement, oder einem eng begründeten Ausschluss.
Was Sie lernen werden
- Wie die Vermittlung der „nächsten Definition“ eine angeforderte transitive Version verbergen kann.
- Wie ausführliche und gefilterte Abhängigkeitsbaumausgaben einen Konflikt eingrenzen.
- Warum das Löschen lokaler Repository-Dateien oder das Hinzufügen zufälliger Ausschlüsse keine dauerhafte Lösung ist.
Für wen ist dies gedacht: Java-Entwickler, die Verknüpfungsfehler, unerwartete Klassen oder anfällige transitive Versionen untersuchen.
Stand 2026: Die Plugin-Optionen variieren je nach Version. Überprüfen Sie daher die aktuelle Dokumentation zum Abhängigkeits-Plugin. Kombinieren Sie die Diagramminspektion mit einem von der Organisation genehmigten Prozess zur Analyse der Softwarezusammensetzung. Ein sauberer Baum allein beweist nicht, dass eine Abhängigkeit sicher ist.
Sicherheitshinweis: Die Befehle und Konfigurationsbeispiele im Originalartikel wurden nicht in einer aktuellen Produktionsumgebung erneut ausgeführt. Überprüfen Sie unterstützte Versionen, Backups, Zugriffskontrollen und Rollback-Schritte in einer separaten Testumgebung, bevor Sie sie anwenden.
Offizielle Primärquellen
Überblick
Wie man in Maven auf Bibliothekskonflikte prüft. Maven löst automatisch die Abhängigkeiten der jar-Bibliothek auf, aber die Standardkonfiguration informiert Sie nicht über Konflikte. Dies ist die Art und Weise, wie man in Maven in solchen Fällen auf Bibliothekskonflikte prüft.
Inhaltsübersicht
1. Wenn Bibliothekskonflikte in Maven auftreten
Maven löst automatisch die Abhängigkeiten von Java-Bibliotheken auf. Die automatische Auflösung von Abhängigkeiten bedeutet, dass, wenn Sie eine Jar-Datei benötigen, automatisch die Jar-Datei beschafft wird, die zum Ausführen dieser Jar-Datei erforderlich ist. Weitere Informationen darüber, wie die Auflösung spezifischer Bibliotheksabhängigkeiten funktioniert, finden Sie im folgenden Artikel.
Wie Maven automatisch die Abhängigkeiten von Jar-Bibliotheken auflöst.
Maven beseitigt nicht jeden Bibliothekskonflikt automatisch. Ohne passende Prüfungen können Konflikte unentdeckt bleiben; dieser Abschnitt zeigt die Diagnose.
2. Wie prüfen
Es gibt zwei Möglichkeiten, um zu prüfen, ob es Konflikte in der Bibliothek gibt
- Einführung von Plug-Ins
- Bestätigung vor der Erstellung per Befehl.
Ein Build-Plug-in ergänzt die pom.xml, während eine Prüfung per Befehl manuell vor dem Build läuft. Die folgenden Abschnitte zeigen beide Varianten.
2-1. Einführung von Plug-Ins
Die folgenden Maven-Webseiten können hilfreich sein.
http://maven.apache.org/enforcer/enforcer-rules/dependencyConvergence.html
Fügen Sie der Datei pom.xml die folgenden Einstellungen hinzu.
<project>
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce</id>
<configuration>
<rules>
<dependencyConvergence/>
</rules>
</configuration>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
...
</project>
Wenn die oben genannten Einstellungen eingefügt werden, tritt der folgende Fehler auf, und die Erstellung schlägt fehl, wenn zum Zeitpunkt der Erstellung Bibliothekskonflikte bestehen.
[WARNING]
Dependency convergence error for org.apache.commons:commons-collections4:4.1 paths to dependency are:
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
+-org.apache.poi:poi:3.17
+-org.apache.commons:commons-collections4:4.1
and
+-com.example.todo:todo-web:1.0.0-SNAPSHOT
+-org.apache.commons:commons-collections4:4.0
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability. See above detailed error message.
Wenn ein Build ohne Plug-ins angewendet wird, treten keine Fehler auf und der Build wird normal beendet. Wenn Sie Konflikte erkennen wollen, müssen Sie dies einrichten.
2-2. Bestätigung vor der Erstellung per Befehl.
Die Abhängigkeiten werden mit den folgenden Befehlen überprüft
mvn dependency:tree -Dverbose
und 'omitted for conflict' wird angezeigt, wenn es einen Konflikt gibt. Es ist auch möglich, die Ausgabe auf die Bereiche einzuschränken, in denen es Konflikte gibt, wie im folgenden Befehl. Hinweis: 'find' ist der Befehl für Windows. Unter Linux ist dies 'grep'.
mvn dependency:tree -Dverbose | find "omitted for conflict"
Bibliothekskonflikte können anhand der Ergebnisse der oben genannten Befehle überprüft werden.
3. Zusammenfassung
Wenn Sie Bibliothekskonflikte zuverlässig erkennen wollen, empfehlen wir die Option "Plug-ins installieren". Durch die Einführung von Plug-ins wird sichergestellt, dass etwaige Konflikte bemerkt werden, da der Build fehlschlägt.