2013-11-03 166 views
6

如果我有上有明確的相關性的B版2.0B版1.0一個具有傳遞性依賴Maven項目。 B的較新版本是否覆蓋舊版本? 我使用maven depencdy:解決目標,它看起來像老版本B未解決。如果A與更新版本B不兼容?或者,如果一個取決於B版2.0和我的項目有運行依賴後B版1.0顯式依賴:解決目標,我看不到的較新版本即可。那麼這些依賴關係如何得到解決呢?更新版本的依賴項覆蓋了Maven項目中的舊版本嗎?

而當我使用解析目標時,它顯示依賴關係。但是這個依賴關係將用於什麼階段?編譯,測試,運行時?

回答

9

更接近您的依賴樹的根的版本將是首選。如果兩個相互衝突的版本在樹中具有相同的深度,則第一個版本(從樹的頂部開始)獲勝。

這是一個完全愚蠢的規則?是的。它唯一的優點是,您可以始終強制某個特定版本的依賴項,方法是將其聲明爲項目的直接依賴項。

所以在你的情況下,將使用B:2.0,因爲它被聲明爲直接依賴。如果A對B:2.0無法正常工作,那麼在代碼中使用B:1.0,或者選擇另一個與A執行相同操作但不會導致衝突的庫。