一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 如何避免Java項目中的循環依賴問題

如何避免Java項目中的循環依賴問題

2021-03-02 23:20編碼是個技術活wang37444 Java教程

當我們開發一個Java項目時,我們要做的第一件事就是添加我們需要使用的依賴項,庫或框架。為此,我們使用依賴管理工具(例如Maven或Gradle),來管理我們的項目依賴。

如何避免Java項目中的循環依賴問題

 前言

當我們開發一個Java項目時,我們要做的第一件事就是添加我們需要使用的依賴項,庫或框架。為此,我們使用依賴管理工具(例如Maven或Gradle),來管理我們的項目依賴。

我們為項目添加的每個依賴項都包含其他依賴項。我們都知道依賴傳遞這個概念。在許多情況下,項目的依賴傳遞不會有任何的問題,因為依賴管理工具(Maven或Gradle)很好地解決了不同庫之間的版本沖突。但是,在其他情況下,當使用我們的API /庫時或者不同的庫依賴的同一個庫不同版本,這些沖突會產生一些錯誤。

舉個例子:

如何避免Java項目中的循環依賴問題

圖中我們的API 庫導入了一些庫,但這些庫同時依賴了庫X的不同版本,這樣就好出現依賴沖突。

如何解決這個問題

在沒有Maven & Gradle 庫管理工具之前,我們開發一個Java項目需要耗費大量的時間去解決我們項目的依賴沖突,Maven & Gradle工具的引入極大的解決了我們依賴的問題,但很多時候我們還是會看到諸如:ClassNotFoundException,MethodNotSupportedException,NoClassDefNotFound這個時候很多情況下依賴開發人員的經驗手動去解決,同時我們也可以依賴一些開發工具去幫助我們排查問題,如:

Eclipse / IntelliJ 開發工具中的Dependency Analyzer

他可以展示所有的依賴項并協助開發人員定位到有沖突的庫。

如何避免Java項目中的循環依賴問題

當您檢測哪些庫包含導致問題的依賴項時,需要從我們的依賴項管理文件(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 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 

結論

依賴沖突是開發過程中比較耗時的一個問題,通過諸如以上的一些功能協助我們盡快定位到問題,但最好的解決方式還是要遵循開發中的規范,約定優于配置。

原文地址:https://mp.weixin.qq.com/s/d0TRBo9uG4NTYh_TS88lYQ

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 本站只有精品 | 99热这里只有精品国产在热久久 | 12一14性水蜜桃 | 午夜理论电影在线观看亚洲 | 女黑人尺寸bbb | 特黄级 | 欧美日韩高清完整版在线观看免费 | 欧美一级专区免费大片俄罗斯 | 青青久久久国产线免观 | 黄色wwwwww| 亚洲日本中文字幕在线2022 | 国产精品最新 | 日本加勒比在线播放 | jazz欧美人免费xxxxxx | 九九99亚洲精品久久久久 | 亚欧洲乱码视频一二三区 | 女学生被老师调教在教室 | 四虎国产精品免费久久麻豆 | 成人影音先锋 | 免费在线观看a | 俄罗斯妈妈k8影院在线观看 | 欧美xbxbxbxb大片 | 思思玖玖玖在线精品视频 | 99精品全国免费7观看视频 | 午夜宅男影院 | 好大好硬好湿好紧h | 精品在线播放 | 好紧好爽的午夜寂寞视频 | 成人影音先锋 | 久久精品免视看国产 | 色综合视频一区二区三区 | 99久久国产综合精品女不卡 | 97蝌蚪自拍自窝 | 国产成人愉拍精品 | 五月婷婷伊人网 | 国产精品女主播自在线拍 | 国产亚洲精aa在线观看香蕉 | 91久久国产综合精品 | 日韩手机在线视频 | 91av俱乐部 | 国色天香社区在线视频播放 |