Maison >Java >javaDidacticiel >Comment éviter les dépendances circulaires dans les projets Java
Par exemple :
Dans l'image, notre bibliothèque API importe certaines bibliothèques, mais ces bibliothèques dépendent également de différentes versions de la bibliothèque X, donc des conflits de dépendances peuvent survenir.
Comment résoudre ce problème
Avant l'existence des outils de gestion de bibliothèque Maven & Gradle, nous développions un projet Java et il a fallu beaucoup de temps pour résoudre les conflits de dépendances de notre projet. L'introduction des outils Maven & Gradle. a résolu notre problème de dépendance, mais nous verrons souvent des choses comme : ClassNotFoundException, MethodNotSupportedException, NoClassDefNotFound Dans de nombreux cas, nous nous appuyons sur l'expérience des développeurs pour le résoudre manuellement. des outils de développement pour nous aider à résoudre les problèmes, tels que :
Dependency Analyzer dans les outils de développement Eclipse/IntelliJ
Il peut afficher toutes les dépendances et aider les développeurs à localiser les bibliothèques en conflit.
Lorsque vous détectez quelles bibliothèques contiennent des dépendances qui posent problème, vous devez exclure toutes les bibliothèques contenant différentes versions de dépendances de notre fichier de gestion des dépendances (pom.xml ou build.gradle).
maven-enforcer-plugin
Maven fournit le plug-in Maven-Enforcer-Plugin pour vérifier le respect de l'accord (ou vérifier l'environnement de développement). Par exemple, version JDK, version Maven, environnement de développement (Linux, Windows, etc.), version du package jar dépendant, etc. Pour utiliser le plug-in, il vous suffit de l'introduire dans le 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>
Lorsque vous faites mvn paquet propre, il imprimera la version jar en conflit et son pom parent dans la console, comme suit :
[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 ]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!