Contohnya:
Dalam gambar, perpustakaan API kami mengimport beberapa perpustakaan, tetapi perpustakaan ini juga bergantung pada versi perpustakaan X yang berbeza, ini akan mengelakkan konflik pergantungan.
Bagaimana untuk menyelesaikan masalah ini
Sebelum terdapat alat pengurusan perpustakaan Maven & Gradle, apabila kami membangunkan projek Java, kami perlu menghabiskan banyak masa untuk menyelesaikan pergantungan konflik dalam projek kami. Pengenalan alat Maven & Gradle telah banyak menyelesaikan masalah pergantungan kami, tetapi banyak kali kami masih akan melihat masalah seperti: ClassNotFoundException, MethodNotSupportedException, NoClassDefNotFound Dalam banyak kes, kami bergantung pada pengalaman pembangun untuk menyelesaikannya secara manual. Pada masa yang sama, kami juga boleh bergantung pada Beberapa alatan pembangunan membantu kami menyelesaikan masalah, seperti:
Penganalisis Ketergantungan dalam alatan pembangunan Eclipse/IntelliJ
Ia boleh memaparkan semua kebergantungan dan membantu pembangun mencari pustaka yang bercanggah.
Apabila anda mengesan perpustakaan yang mengandungi kebergantungan yang menyebabkan masalah, ia perlu dikecualikan daripada fail pengurusan kebergantungan kami (pom.xml atau build.gradle) Semua perpustakaan dengan versi kebergantungan yang berbeza.
pemalam maven-enforcer-plugin
Maven menyediakan pemalam Maven-Enforcer-Plugin untuk mengesahkan pematuhan dengan kontrak (atau mengesahkan persekitaran pembangunan) . Contohnya, versi JDK, versi Maven, persekitaran pembangunan (Linux, Windows, dll.), versi pakej balang bergantung, dsb.
Untuk menggunakan pemalam, anda hanya perlu memperkenalkannya dalam pom:
<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>
dalam Apabila melaksanakan pakej bersih mvn, versi balang yang bercanggah dan pom induknya akan dicetak dalam konsol, seperti berikut:
[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 ]
Atas ialah kandungan terperinci Bagaimana untuk mengelakkan kebergantungan bulat dalam projek Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!