Heim >Java >javaLernprogramm >So vermeiden Sie zirkuläre Abhängigkeiten in Java-Projekten
Zum Beispiel:
Im Bild importiert unsere API-Bibliothek einige Bibliotheken, aber diese Bibliotheken hängen auch von verschiedenen Versionen der Bibliothek X ab, sodass Abhängigkeitskonflikte auftreten können.
So lösen Sie dieses Problem
Bevor es Maven- und Gradle-Bibliotheksverwaltungstools gab, haben wir ein Java-Projekt entwickelt und es hat viel Zeit gedauert, die Abhängigkeitskonflikte unseres Projekts zu lösen Wir haben unser Problem gelöst, aber oft werden wir immer noch Dinge sehen wie: ClassNotFoundException, MethodNotSupportedException, NoClassDefNotFound. In vielen Fällen verlassen wir uns auf die Erfahrung der Entwickler, um es manuell zu lösen Entwicklungstools, die uns bei der Behebung von Problemen helfen, wie zum Beispiel:
Abhängigkeitsanalysator in Eclipse/IntelliJ-Entwicklungstools
Es kann alle Abhängigkeiten anzeigen und Entwickler beim Auffinden widersprüchlicher Bibliotheken unterstützen.
Wenn Sie feststellen, welche Bibliotheken Abhängigkeiten enthalten, die Probleme verursachen, müssen Sie alle Bibliotheken, die unterschiedliche Versionen von Abhängigkeiten enthalten, aus unserer Abhängigkeitsverwaltungsdatei (pom.xml oder build.gradle) ausschließen.
maven-enforcer-plugin
Maven stellt das Maven-Enforcer-Plugin-Plugin zur Verfügung, um die Einhaltung der Vereinbarung (oder die Entwicklungsumgebung) zu überprüfen. Zum Beispiel JDK-Version, Maven-Version, Entwicklungsumgebung (Linux, Windows usw.), abhängige JAR-Paketversion usw. Um das Plug-In zu verwenden, müssen Sie es nur im POM einführen:
<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-enforcer-plugin</artifactid> <version>1.3.1</version> <executions> <execution> <id>enforce</id> <configuration> <rules> <dependencyconvergence></dependencyconvergence> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin>
Beim Ausführen von mvn Wenn Sie das Paket bereinigen, wird die in Konflikt stehende JAR-Version und ihr übergeordnetes POM wie folgt in der Konsole ausgegeben:
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce) @ uaf-uafei-provider --- [WARNING] Dependency convergence error for com.google.guava:guava:16.0 paths to dependency are: +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-sleuth:0.2.09-SNAPSHOT +-org.springframework.cloud:spring-cloud-starter-openfeign:2.1.5.RELEASE +-io.github.openfeign:feign-hystrix:10.4.0 +-com.netflix.archaius:archaius-core:0.7.6 +-com.google.guava:guava:16.0 and +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-apollo:0.2.09-SNAPSHOT +-com.google.inject:guice:4.1.0 +-com.google.guava:guava:19.0 [WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message: Failed while enforcing releasability the error(s) are [ Dependency convergence error for com.google.guava:guava:16.0 paths to dependency are: +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-sleuth:0.2.09-SNAPSHOT +-org.springframework.cloud:spring-cloud-starter-openfeign:2.1.5.RELEASE +-io.github.openfeign:feign-hystrix:10.4.0 +-com.netflix.archaius:archaius-core:0.7.6 +-com.google.guava:guava:16.0 and +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT +-com.uaf:microservice-apollo:0.2.09-SNAPSHOT +-com.google.inject:guice:4.1.0 +-com.google.guava:guava:19.0 ]
Das obige ist der detaillierte Inhalt vonSo vermeiden Sie zirkuläre Abhängigkeiten in Java-Projekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!