讀古今文學網 > Maven實戰 > 5.9.1 排除依賴 >

5.9.1 排除依賴

傳遞性依賴會給項目隱式地引入很多依賴,這極大地簡化了項目依賴的管理,但是有些時候這種特性也會帶來問題。例如,當前項目有一個第三方依賴,而這個第三方依賴由於某些原因依賴了另外一個類庫的SNAPSHOT版本,那麼這個SNAPSHOT就會成為當前項目的傳遞性依賴,而SNAPSHOT的不穩定性會直接影響到當前的項目。這時就需要排除掉該SNAPSHOT,並且在當前項目中聲明該類庫的某個正式發佈的版本。還有一些情況,你可能也想要替換某個傳遞性依賴,比如Sun JTA API,Hibernate依賴於這個JAR,但是由於版權的因素,該類庫不在中央倉庫中,而Apache Geronimo項目有一個對應的實現。這時你就可以排除Sun JAT API,再聲明Geronimo的JTA API實現,見代碼清單5-9。

代碼清單5-9 排除傳遞性依賴

上述代碼中,項目A依賴於項目B,但是由於一些原因,不想引入傳遞性依賴C,而是自己顯式地聲明對於項目C 1.1.0版本的依賴。代碼中使用exclusions元素聲明排除依賴,exclusions可以包含一個或者多個exclusion子元素,因此可以排除一個或者多個傳遞性依賴。需要注意的是,聲明exclusion的時候只需要groupId和artifactId,而不需要version元素,這是因為只需要groupId和artifactId就能唯一定位依賴圖中的某個依賴。換句話說,Maven解析後的依賴中,不可能出現groupId和artifactId相同,但是version不同的兩個依賴,這一點在5.6節中已做過解釋。該例的依賴解析邏輯如圖5-4所示。

圖5-4 排除依賴