maven学习系列——(七)Dependency
Dependency介紹
本文轉自:Maven簡介(六)——Dependency,并加上自己在實際使用中的總結和說明!
1、依賴的傳遞性
依賴傳遞對版本的選擇
假設A依賴于B和C,然后B依賴于D,D又依賴于E1.0,C直接依賴于E2.0,那么這個時候A依賴的是E1.0還是E2.0,還是這兩個都依賴呢?兩個都依賴是肯定不行的,因為它們可能會有沖突的地方。這個時候就涉及到Maven中依賴傳遞對版本的選擇問題。依賴傳遞在選擇版本的時候首先是根據深度選擇的。當一個項目同時經過不同的路徑依賴于同一個組件時,會選擇其深度最短的對應組件進行依賴。
舉例來說:
第一種情況:
- 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會根據申明的依賴順序來進行選擇,先申明的會被作為依賴包。像前面這種情況,如果先申明對B的依賴,則A依賴的就是D1.0;如果先申明對C的依賴,則A依賴的就是D2.0。
總結:
1、路徑相同的情況,會根據申明的依賴順序來進行選擇,先申明的會被作為依賴包。
2、路徑不同的情況,采用 深度最短的對應組件進行依賴。
使用exclusion排除依賴
假設有這樣一種依賴關系,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>總結:
exclusions: 在實際項目中使用的還是比較多,可以解決:
1、依賴傳遞問題
2、版本沖突問題
2、 依賴項的作用域
test:表示該依賴項只對測試時有用,包括測試代碼的編譯和運行,對于正常的項目運行是沒有影響的。
比如:Junit jar、Spring-test jar
provided:表示該依賴項將由JDK或者運行容器在運行時提供,也就是說由Maven提供的該依賴項我們只有在編譯和測試時才會用到,而在運行時將由JDK或者運行容器提供
比如:servlet-api jar
compile:這是依賴項的默認作用范圍,即當沒有指定依賴項的scope時默認使用compile。compile范圍內的依賴項在所有情況下都是有效的,包括運行、測試和編譯時。
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>
總結:
1、集中管理依賴項和依賴項使用的版本進行統一管理。
2、子項目需要直接引用才有能引入自己需要的依賴包,不需要在寫版本號!
3、開源項目中使用較多,這個在大型項目或者jar依賴較多的項目必須使用!!!一定要學會使用方法。
子項目使用方法:
<dependencies> <dependency> <groupId>groupC</groupId> <artifactId>artifactC</artifactId> <!-- 不需要指定版本,會依賴父類統一管理版本--></dependency> </dependencies>總結
以上是生活随笔為你收集整理的maven学习系列——(七)Dependency的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星s9更新android9.0,三星G
- 下一篇: css的属性是变量是怎么表达,CSS自定