更新時間:2021-07-14 15:54:43 來源:動力節點 瀏覽1379次
我們在平時的項目開發中也是同理,你需要依賴一些東西才能實現相應的功能,但相應的功能或許也可以依賴其它的東西實現,比如數據庫操作吧,你可以依賴hibernate,但你也可以通過mybatis來做。
這就是所謂的依賴關系咯。
以前我們需要手動的去找hibernate或者mybatis的jar包,系統拋異常我們還不知哪里報錯,通過琢磨才明白沒有引入相應的jar包,然后就去找啊找,找到了然后引入到工程當中。在這里我們就看到maven的好處了,它就是一個倉庫,倉庫里面有各種各樣的包,想要什么就在pom.xml中依賴一下就好了,就算倉庫中沒有的包也可以把它扔到倉庫中,想用的時候就依賴一下。
(1)根據Jar包的不同,需要為其設置不同的傳遞方式,即傳遞范圍。Maven中的依賴傳遞范圍設置在<scope>標簽中。其取值有6種:
1)compile
第1類Jar包應設置的范圍。是默認值。其會向下傳遞該依賴。
2)test
第2類Jar包應設置的范圍。其不會向下傳遞該依賴。
3)provided
第3類Jar包應設置的范圍。其不會向下傳遞該依賴。
4)runtime
第4類Jar包應設置的范圍。其會向下傳遞該依賴。
5)system
不從本地倉庫查找指定的依賴,而從<systemPath>路徑查找。
A.直接依賴
項目A要用到別的項目B的架構的東西,所以項目A直接依賴B項目
B.間接依賴
項目B依賴A,C依賴B,那么C間接依賴A
C.依賴傳遞性
Maven的依賴是具有傳遞性的,比如A->B,B->C,那么A間接的依賴于C,這就是依賴的傳遞性,其中A對于B是第一直接依賴,B對于C是第二直接依賴,C為A的傳遞性依賴。
D.可選依賴與排除依賴
傳遞性依賴會給項目隱式的引入很多依賴,這極大的簡化了項目依賴的管理,但是有些時候這種特性也會帶來問題,它可能會把我們不需要的jar包也引入到了工程當中,使項目結構變得更復雜。或者你想替換掉默認的依賴換成自己想要的jar包,這時候就需要用到依賴排除。
例子中spring-core包依賴了commons-logging包,我們使用exclusions元素聲明排除依賴,exclusions可以包含一個或者多個exclusion子元素,因此可以排除一個或者多個傳遞性依賴。需要注意的是,聲明exclusions的時候只需要groupId和artifactId,而不需要version元素,這是因為只需要groupId和artifactId就能唯一定位依賴圖中的某個依賴。換句話說,Maven解析后的依賴中,不可能出現groupId和artifactId相同,但是version不同的兩個依賴。
E.依賴沖突(調解)
下面我們來思考這樣一個問題,如果A->B->C->X(1.0),A->D-X(2.0),即A間接依賴X,我們可以看到有兩條路徑都依賴X,那么maven將會選擇哪個版本的X?maven當中有一套自己的規則,我們來說明一下,maven傳遞性依賴的一些規則以及如何排除依賴沖突。
1.最短路徑原則:如果A對于依賴路徑中有兩個相同的jar包,那么選擇路徑短的那個包,路徑最近者優先,上述會選X(2.0)。
2.第一聲明優先原則:如果A對于依賴路徑中有兩個相同的jar包,路徑長度也相同,那么依賴寫在前面的優先。例如:A->B->F(1.0),A->C->F(2.0),會選F(1.0)。
3.可選依賴不會被傳遞,如A->B,B->;C,B->;D,A對B直接依賴,B對C和D是可選依賴,那么在A中不會引入C和D。可選依賴通過optional元素配置,true表示可選。如果要在A項目中使用C或者D則需要顯式地聲明C或者D依賴。
版本號統一管理
聚合
在Maven中,可能我們要做多個test,但是一個一個的測試去做,這樣會很麻煩,為了簡單方便,我們把所有的test package,都匯聚到一個package中,我們利用這個測試可以進行所有的test的測試,這個過程就是聚合。目前菜鳥的水平來看這個聚合,主要功能就是方便Test的!
以上就是動力節點小編介紹的"Maven依賴關系",希望對大家有幫助,想了解更多可查看Maven教程。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習