日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven学习系列——(七)Dependency

發(fā)布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven学习系列——(七)Dependency 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Dependency介紹

本文轉(zhuǎn)自:Maven簡介(六)——Dependency,并加上自己在實際使用中的總結(jié)和說明!

1、依賴的傳遞性

依賴傳遞對版本的選擇

假設(shè)A依賴于B和C,然后B依賴于D,D又依賴于E1.0,C直接依賴于E2.0,那么這個時候A依賴的是E1.0還是E2.0,還是這兩個都依賴呢?兩個都依賴是肯定不行的,因為它們可能會有沖突的地方。這個時候就涉及到Maven中依賴傳遞對版本的選擇問題。依賴傳遞在選擇版本的時候首先是根據(jù)深度選擇的。當一個項目同時經(jīng)過不同的路徑依賴于同一個組件時,會選擇其深度最短的對應(yīng)組件進行依賴。

舉例來說:
第一種情況:

  • A->B->C->D1.0
  • A->E->D2.0

那么這個時候A就會選擇對D 相對路徑短 的組件來進行依賴,也就是D2.0

那么當深度一樣的時候Maven會如何選擇呢?

  • A->B->D1.0
  • A->C->D2.0

這個時候Maven會如何選擇A所依賴的D的版本呢?

這種情況Maven會根據(jù)申明的依賴順序來進行選擇,先申明的會被作為依賴包。像前面這種情況,如果先申明對B的依賴,則A依賴的就是D1.0;如果先申明對C的依賴,則A依賴的就是D2.0。

總結(jié):
1、路徑相同的情況,會根據(jù)申明的依賴順序來進行選擇,先申明的會被作為依賴包。
2、路徑不同的情況,采用 深度最短的對應(yīng)組件進行依賴。

使用exclusion排除依賴

假設(shè)有這樣一種依賴關(guān)系,A->B->C,這個時候由于某些原因,我們不需要對C的依賴,但是我們又必須要對B的依賴,這個時候該怎么辦呢?針對這種情況,Maven給我們提供了一個exclusion功能,我們可以在添加A對B的依賴時申明不需要引進B對C的依賴。具體做法如下:

<dependencies> <dependency> <groupId>groupB</groupId> <artifactId>artifactB</artifactId> <version>1.0</version> <exclusions> <exclusion> <groupId>groupC</groupId> <artifactId>artifactC</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>

總結(jié):
exclusions: 在實際項目中使用的還是比較多,可以解決:
1、依賴傳遞問題
2、版本沖突問題

2、 依賴項的作用域

test:表示該依賴項只對測試時有用,包括測試代碼的編譯和運行,對于正常的項目運行是沒有影響的。
比如:Junit jar、Spring-test jar

provided:表示該依賴項將由JDK或者運行容器在運行時提供,也就是說由Maven提供的該依賴項我們只有在編譯和測試時才會用到,而在運行時將由JDK或者運行容器提供
比如:servlet-api jar

compile這是依賴項的默認作用范圍,即當沒有指定依賴項的scope時默認使用compile。compile范圍內(nèi)的依賴項在所有情況下都是有效的,包括運行、測試和編譯時。

runtime:表示該依賴項只有在運行時才是需要的,在編譯的時候不需要。這種類型的依賴項將在運行和test的類路徑下可以訪問。
比如:mysql-connector-java jar

3、dependencyManagement介紹

使用的配置如下:

<project> ... <dependencyManagement> <dependencies> <dependency> <groupId>groupC</groupId> <artifactId>artifactC</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>groupD</groupId> <artifactId>artifactD</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>groupE</groupId> <artifactId>artifactE</artifactId> <version>1.0</version> <type>bar</type> </dependency> </dependencies> </dependencyManagement> ... </project>


總結(jié):
1、集中管理依賴項和依賴項使用的版本進行統(tǒng)一管理。
2、子項目需要直接引用才有能引入自己需要的依賴包,不需要在寫版本號!
3、開源項目中使用較多,這個在大型項目或者jar依賴較多的項目必須使用!!!一定要學會使用方法。

子項目使用方法:

<dependencies> <dependency> <groupId>groupC</groupId> <artifactId>artifactC</artifactId> <!-- 不需要指定版本,會依賴父類統(tǒng)一管理版本--></dependency> </dependencies>

總結(jié)

以上是生活随笔為你收集整理的maven学习系列——(七)Dependency的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。