日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何避免Java項目中的循環(huán)依賴問題

前言

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

我們?yōu)轫椖刻砑拥拿總€依賴項都包含其他依賴項。我們都知道依賴傳遞這個概念。在許多情況下,項目的依賴傳遞不會有任何的問題,因?yàn)橐蕾嚬芾砉ぞ?Maven或Gradle)很好地解決了不同庫之間的版本沖突。但是,在其他情況下,當(dāng)使用我們的API /庫時或者不同的庫依賴的同一個庫不同版本,這些沖突會產(chǎn)生一些錯誤。

舉個例子:

圖中我們的API 庫導(dǎo)入了一些庫,但這些庫同時依賴了庫X的不同版本,這樣就好出現(xiàn)依賴沖突。

如何解決這個問題

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

Eclipse / IntelliJ 開發(fā)工具中的Dependency Analyzer

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

當(dāng)您檢測哪些庫包含導(dǎo)致問題的依賴項時,需要從我們的依賴項管理文件(pom.xml或build.gradle)中排除所有包含不同版本依賴項的庫。

maven-enforcer-plugin插件

Maven提供了Maven-Enforcer-Plugin插件,用來校驗(yàn)約定遵守情況(或者說校驗(yàn)開發(fā)環(huán)境)。比如JDK的版本,Maven的版本,開發(fā)環(huán)境(Linux,Windows等),依賴jar包的版本等等

插件使用只需要在pom中引入即可:

 
 
 
 
  1.  
  2.     org.apache.maven.plugins 
  3.     maven-enforcer-plugin 
  4.     1.3.1 
  5.      
  6.          
  7.             enforce 
  8.              
  9.                  
  10.                      
  11.                  
  12.              
  13.              
  14.                 enforce 
  15.              
  16.          
  17.      
  18.  

在進(jìn)行mvn clean package的時候,會在console中打印出來沖突的jar版本和其父pom,如下:

 
 
 
 
  1. [INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce) @ uaf-uafei-provider --- 
  2. [WARNING]  
  3. Dependency convergence error for com.google.guava:guava:16.0 paths to dependency are: 
  4. +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT 
  5.   +-com.uaf:microservice-sleuth:0.2.09-SNAPSHOT 
  6.     +-org.springframework.cloud:spring-cloud-starter-openfeign:2.1.5.RELEASE 
  7.       +-io.github.openfeign:feign-hystrix:10.4.0 
  8.         +-com.netflix.archaius:archaius-core:0.7.6 
  9.           +-com.google.guava:guava:16.0 
  10. and 
  11. +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT 
  12.   +-com.uaf:microservice-apollo:0.2.09-SNAPSHOT 
  13.     +-com.google.inject:guice:4.1.0 
  14.       +-com.google.guava:guava:19.0 
  15.  
  16. [WARNING] Rule 0: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message: 
  17. Failed while enforcing releasability the error(s) are [ 
  18. Dependency convergence error for com.google.guava:guava:16.0 paths to dependency are: 
  19. +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT 
  20.   +-com.uaf:microservice-sleuth:0.2.09-SNAPSHOT 
  21.     +-org.springframework.cloud:spring-cloud-starter-openfeign:2.1.5.RELEASE 
  22.       +-io.github.openfeign:feign-hystrix:10.4.0 
  23.         +-com.netflix.archaius:archaius-core:0.7.6 
  24.           +-com.google.guava:guava:16.0 
  25. and 
  26. +-com.uaf.uafei:uaf-uafei-provider:0.2.09-SNAPSHOT 
  27.   +-com.uaf:microservice-apollo:0.2.09-SNAPSHOT 
  28.     +-com.google.inject:guice:4.1.0 
  29.       +-com.google.guava:guava:19.0 

結(jié)論

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


本文標(biāo)題:如何避免Java項目中的循環(huán)依賴問題
網(wǎng)站鏈接:http://m.5511xx.com/article/ccdipji.html