在上一個項目中遇到一些jar包沖突的問題,之后還有很多人分不清楚dependencies與dependencyManagement的區別,本篇文章將這些區別總結下來。
利用pom管理引用包時,如果是單項目的話就直接在dependencies引用了,若有一個大工程項目里面包含多個子模塊,則為了所有項目模塊包的版本統一和好管理,則需要用到dependencyManagement,但兩者使用場景有所區別。
1.dependencies:自動引入聲明在dependencies里的所有依賴,并默認被所有的子項目繼承。如果項目中不寫依賴項,則會從父項目
繼承(屬性全部繼承)聲明在父項目dependencies里的依賴項。2.dependencyManagement里只是聲明依賴(可以理解為只在父項目,外層來聲明項目中要引入哪些jar包),因此子項目需要顯示的聲明需要的依賴。如果不在子項目中聲明依賴,
是不會從父項目中繼承的;只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取
自父pom;如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。同時dependencyManagement讓子項目引用依賴,而不用顯示的列出版本號。Maven會沿著父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然后它就會使用在這個
dependencyManagement元素中指定的版本號,實現所有子項目使用的依賴項為同一版本。3.dependencyManagement 中的 dependencies 并不影響項目的依賴項;而獨立dependencies元素則影響項目的依賴項。只有當外
層的dependencies元素中沒有指明版本信息時,dependencyManagement 中的 dependencies 元素才起作用。一個是項目依賴,一個是maven項目多模塊情況時作依賴管理控制的。