更新時間:2021-07-14 15:54:43 來源:動力節(jié)點(diǎn) 瀏覽1368次
我們在平時的項目開發(fā)中也是同理,你需要依賴一些東西才能實(shí)現(xiàn)相應(yīng)的功能,但相應(yīng)的功能或許也可以依賴其它的東西實(shí)現(xiàn),比如數(shù)據(jù)庫操作吧,你可以依賴hibernate,但你也可以通過mybatis來做。
這就是所謂的依賴關(guān)系咯。
以前我們需要手動的去找hibernate或者mybatis的jar包,系統(tǒng)拋異常我們還不知哪里報錯,通過琢磨才明白沒有引入相應(yīng)的jar包,然后就去找啊找,找到了然后引入到工程當(dāng)中。在這里我們就看到maven的好處了,它就是一個倉庫,倉庫里面有各種各樣的包,想要什么就在pom.xml中依賴一下就好了,就算倉庫中沒有的包也可以把它扔到倉庫中,想用的時候就依賴一下。
(1)根據(jù)Jar包的不同,需要為其設(shè)置不同的傳遞方式,即傳遞范圍。Maven中的依賴傳遞范圍設(shè)置在<scope>標(biāo)簽中。其取值有6種:
1)compile
第1類Jar包應(yīng)設(shè)置的范圍。是默認(rèn)值。其會向下傳遞該依賴。
2)test
第2類Jar包應(yīng)設(shè)置的范圍。其不會向下傳遞該依賴。
3)provided
第3類Jar包應(yīng)設(shè)置的范圍。其不會向下傳遞該依賴。
4)runtime
第4類Jar包應(yīng)設(shè)置的范圍。其會向下傳遞該依賴。
5)system
不從本地倉庫查找指定的依賴,而從<systemPath>路徑查找。
A.直接依賴
項目A要用到別的項目B的架構(gòu)的東西,所以項目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包也引入到了工程當(dāng)中,使項目結(jié)構(gòu)變得更復(fù)雜。或者你想替換掉默認(rèn)的依賴換成自己想要的jar包,這時候就需要用到依賴排除。
例子中spring-core包依賴了commons-logging包,我們使用exclusions元素聲明排除依賴,exclusions可以包含一個或者多個exclusion子元素,因此可以排除一個或者多個傳遞性依賴。需要注意的是,聲明exclusions的時候只需要groupId和artifactId,而不需要version元素,這是因為只需要groupId和artifactId就能唯一定位依賴圖中的某個依賴。換句話說,Maven解析后的依賴中,不可能出現(xiàn)groupId和artifactId相同,但是version不同的兩個依賴。
E.依賴沖突(調(diào)解)
下面我們來思考這樣一個問題,如果A->B->C->X(1.0),A->D-X(2.0),即A間接依賴X,我們可以看到有兩條路徑都依賴X,那么maven將會選擇哪個版本的X?maven當(dāng)中有一套自己的規(guī)則,我們來說明一下,maven傳遞性依賴的一些規(guī)則以及如何排除依賴沖突。
1.最短路徑原則:如果A對于依賴路徑中有兩個相同的jar包,那么選擇路徑短的那個包,路徑最近者優(yōu)先,上述會選X(2.0)。
2.第一聲明優(yōu)先原則:如果A對于依賴路徑中有兩個相同的jar包,路徑長度也相同,那么依賴寫在前面的優(yōu)先。例如: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依賴。
版本號統(tǒng)一管理
聚合
在Maven中,可能我們要做多個test,但是一個一個的測試去做,這樣會很麻煩,為了簡單方便,我們把所有的test package,都匯聚到一個package中,我們利用這個測試可以進(jìn)行所有的test的測試,這個過程就是聚合。目前菜鳥的水平來看這個聚合,主要功能就是方便Test的!
以上就是動力節(jié)點(diǎn)小編介紹的"Maven依賴關(guān)系",希望對大家有幫助,想了解更多可查看Maven教程。動力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743