爲什麼會產生依賴衝突?

問:既然maven有”短路優先“和”第一聲明“原則來判斷需要使用哪個類,爲什麼還會發生依賴衝突?

答:想要回答這個問題,不妨思考一下以下兩個問題
1、“maven的兩個原則發生生命週期的哪一個phase?”
2、“發生jar包衝突時,爲什麼編譯期不報錯,但是運行期會報錯,jar包衝突的問題爲什麼就這麼把編譯器忽悠過去了?”
首先,在編譯階段,maven是不會進行兩個原則的判斷的,只要有相應版本的依賴,就可以正確編譯,並不涉及多選一的問題;
然後,在打包階段,maven會真正按照兩個原則去進行打包,從多個版本中選擇一個打入包中;
最後,進入運行期,如果ClassLoader加載的包恰好沒有你要的Class,則會報ClassNotFound之類的錯誤。
總結:maven的”短路優先“和”第一聲明“原則發生的階段,是在打包階段,編譯期不會進行版本選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章