這篇“Java項(xiàng)目如何避免循環(huán)依賴”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Java項(xiàng)目如何避免循環(huán)依賴”文章吧。
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的岑溪網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
舉個(gè)例子:
圖中我們的API 庫(kù)導(dǎo)入了一些庫(kù),但這些庫(kù)同時(shí)依賴了庫(kù)X的不同版本,這樣就好出現(xiàn)依賴沖突。
如何解決這個(gè)問(wèn)題
在沒(méi)有Maven & Gradle 庫(kù)管理工具之前,我們開(kāi)發(fā)一個(gè)Java項(xiàng)目需要耗費(fèi)大量的時(shí)間去解決我們項(xiàng)目的依賴沖突,Maven & Gradle工具的引入極大的解決了我們依賴的問(wèn)題,但很多時(shí)候我們還是會(huì)看到諸如:ClassNotFoundException,MethodNotSupportedException,NoClassDefNotFound這個(gè)時(shí)候很多情況下依賴開(kāi)發(fā)人員的經(jīng)驗(yàn)手動(dòng)去解決,同時(shí)我們也可以依賴一些開(kāi)發(fā)工具去幫助我們排查問(wèn)題,如:
Eclipse / IntelliJ 開(kāi)發(fā)工具中的Dependency Analyzer
他可以展示所有的依賴項(xiàng)并協(xié)助開(kāi)發(fā)人員定位到有沖突的庫(kù)。
當(dāng)您檢測(cè)哪些庫(kù)包含導(dǎo)致問(wèn)題的依賴項(xiàng)時(shí),需要從我們的依賴項(xiàng)管理文件(pom.xml或build.gradle)中排除所有包含不同版本依賴項(xiàng)的庫(kù)。
maven-enforcer-plugin插件
Maven提供了Maven-Enforcer-Plugin插件,用來(lái)校驗(yàn)約定遵守情況(或者說(shuō)校驗(yàn)開(kāi)發(fā)環(huán)境)。比如JDK的版本,Maven的版本,開(kāi)發(fā)環(huán)境(Linux,Windows等),依賴jar包的版本等等
插件使用只需要在pom中引入即可:
org.apache.maven.plugins maven-enforcer-plugin 1.3.1 enforce enforce
在進(jìn)行mvn clean package的時(shí)候,會(huì)在console中打印出來(lái)沖突的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 ]
以上就是關(guān)于“Java項(xiàng)目如何避免循環(huán)依賴”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。