學習筆記——Maven 如何處理傳遞性依賴

愛自己發表於2014-07-23

maven引入的傳遞性依賴機制,一方面大大簡化和方便了依賴宣告,另一方面,大部分情況下我們只需要關心專案的直接依賴是什麼,而不用考慮這些直接依賴會引入什麼傳遞性依賴。但有時候,當傳遞性依賴造成問題的時候,我們就需要清楚地知道該傳遞性依賴是從哪條依賴路徑引入的。

 

例如,專案A有這樣的依賴關係 : A-->B-->C-->X(1.0)、A-->D-->X(2.0),X是A的傳遞性依賴,但是兩條依賴路徑上有兩個版 本的X,那麼哪個X會被maven解析使用呢?兩個版本都被解析顯然是不對的,因為那會造成依賴重複,因此必須選擇一個。maven依賴調解的第一原則:路徑最近者優先。該例中X(1.0)的路徑長度為3,而X(2.0)的路徑長度為2,因此X(2.0)會被解析使用。

 

依賴調解第一原則不能解決所有問題,比如這樣的依賴關係:A-->B-->Y(1.0),A-->C-->Y(2.0),Y(1.0)和Y(2.0)的依賴路徑長度是一樣的,都為2。那麼到底誰會被解析使用呢?在maven2.0.8及之前的版本中,這是不確定的,但是maven2.0.9開始,為了儘可能避免構建的不確定性,maven定義了依賴調解的第二原則:第一宣告者優先。在依賴路徑長度相等的前提下,在POM中依賴宣告的順序決定了誰會被解析使用。順序最靠前的那個依賴優勝。

相關文章