Maison > Java > javaDidacticiel > Comment éviter les dépendances circulaires dans les projets Java

Comment éviter les dépendances circulaires dans les projets Java

王林
Libérer: 2023-05-04 15:55:06
avant
1339 Les gens l'ont consulté

Par exemple :

Comment éviter les dépendances circulaires dans les projets Java

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.

Comment éviter les dépendances circulaires dans les projets Java

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>
Copier après la connexion

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 ]
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal