一、傳遞性依賴html
傳遞性依賴也就是隱式依賴,能夠極大的簡化項目依賴的管理,可是也會致使一些難以排查的問題。spring
如:當項目引入一個第三方依賴,因爲某些緣由,依賴了另一個類庫的SNAPSHOT版本,那麼這個SNAPSHOT就會成爲當前項目的傳遞性依賴,而SNAPSHOT依賴的不穩定性會直接影響大年的項目,此時須要手動排除該傳遞性依賴,並在當前項目中聲明某個該類庫的正式發佈版本,或者是你直接想要替換某個傳遞性依賴。maven
替換傳遞性依賴:<exclusions></ exclusions>測試
上述圖片,項目a依賴項目b,因爲某些緣由不想引入項目c,而本身顯示聲明多項目c1.1.0版本的依賴,邏輯圖以下:優化
二、歸類依賴spa
簡而言之,當咱們依賴一整套組件時,如spring,咱們一般是依賴他們各個組件的同一個版本,此時因爲每一個依賴都須要指定版本,重複性工做太多而且一旦依賴版本升級,修改也比較繁瑣,因此經過歸類,咱們能夠經過maven的properties屬性,在一個位置指定具體版本,其餘具體依賴直接獲取這個屬性便可。htm
pom文件指定屬性:blog
pom文件具體依賴直接獲取圖片
三、優化依賴ci
3.一、mvn dependency:list :查看當前項目的已解析依賴
3.二、mvn dependency:tree :查看當前項目的依賴樹
3.三、mvn dependency:analyze :分析當前項目的依賴
這裏會出現兩種常見說明:
Used undeclared dependencies found:未顯示聲明但已使用的依賴(傳遞性依賴)
Unused delared dependencies found:已顯示聲明但未使用的依賴(因爲此mvn命令只是分析主代碼和測試類,並不全面,因此對於這條分析結果,須要自行排查此依賴
是否真的沒有用,再決定是否刪除不可直接刪除)
四、依賴衝突與解決
依賴衝突解決資源來自:http://www.cnblogs.com/ygj0930/p/6628429.html
依賴衝突:一個項目A,經過不一樣依賴傳遞路徑依賴於X,若在不一樣路徑下傳遞過來的X版本不一樣,那麼A應該導入哪一個版本的X包呢?
衝突解決方案:
1:若是依賴路徑的長度不一樣,則「短路優先」:
A—>B—>C—>D—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
則A依賴於X(version 0.0.2)。
2:依賴路徑長度相同狀況下,則「先聲明優先」:
A—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
則在項目A的<depencies></depencies>中,E、F哪一個在先則A依賴哪條路徑的X。