当前位置: 首页 » 综合知识 » it知识 » 正文

Java项目如何避免循环依赖

发布时间:2023-07-25 以下文章来源于网友投稿,内容仅供参考!

举个例子:

图中我们的API 库导入了一些库,但这些库同时依赖了库X的不同版本,这样就好出现依赖冲突。

如何解决这个问题

在没有Maven & Gradle 库管理工具之前,我们开发一个Java项目需要耗费大量的时间去解决我们项目的依赖冲突,Maven &  Gradle工具的引入极大的解决了我们依赖的问题,但很多时候我们还是会看到诸如:ClassNotFoundException,MethodNotSupportedException,NoClassDefNotFound这个时候很多情况下依赖开发人员的经验手动去解决,同时我们也可以依赖一些开发工具去帮助我们排查问题,如:

Eclipse / IntelliJ 开发工具中的Dependency Analyzer

他可以展示所有的依赖项并协助开发人员定位到有冲突的库。


当您检测哪些库包含导致问题的依赖项时,需要从我们的依赖项管理文件(pom.xml或build.gradle)中排除所有包含不同版本依赖项的库。

maven-enforcer-plugin插件

Maven提供了Maven-Enforcer-Plugin插件,用来校验约定遵守情况(或者说校验开发环境)。比如JDK的版本,Maven的版本,开发环境(Linux,Windows等),依赖jar包的版本等等

插件使用只需要在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/>                 </rules>             </configuration>             <goals>                 <goal>enforce</goal>             </goals>         </execution>     </executions> </plugin>

在进行mvn clean package的时候,会在console中打印出来冲突的jar版本和其父pom,如下:

[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce) @ uaf-uafei-provider --- [WARNING]  Dependency convergence error for .google.guava:guava:16.0 paths to dependency are: +.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT   +.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         +.netflix.archaius:archaius-core:0.7.6           +.google.guava:guava:16.0 and +.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT   +.uaf:microservice-apollo:0.2.09-SNAPSHOT     +.google.inject:guice:4.1.0       +.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 .google.guava:guava:16.0 paths to dependency are: +.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT   +.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         +.netflix.archaius:archaius-core:0.7.6           +.google.guava:guava:16.0 and +.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT   +.uaf:microservice-apollo:0.2.09-SNAPSHOT     +.google.inject:guice:4.1.0       +.google.guava:guava:19.0 ]
  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师