maven项目的依赖、继承管理
目錄
- maven依賴
- scope 依賴范圍
- 依賴傳遞
- 依賴沖突
- 可選依賴
- 排除依賴
- maven繼承
- 繼承
maven依賴
scope 依賴范圍
-
其中依賴范圍scope 用來控制依賴和編譯,測(cè)試,運(yùn)行的classpath的關(guān)系. 主要的是三種依賴關(guān)系如下:
- compile: 默認(rèn)編譯依賴范圍。對(duì)于編譯,測(cè)試,運(yùn)行三種classpath都有效
- test:測(cè)試依賴范圍。只對(duì)于測(cè)試classpath有效
- provided:已提供依賴范圍。對(duì)于編譯,測(cè)試的classpath都有效,但對(duì)于運(yùn)行無效。因?yàn)橛扇萜饕呀?jīng)提供,例如servlet-api
- runtime:運(yùn)行時(shí)提供。例如:jdbc驅(qū)動(dòng)
依賴傳遞
project…test2的pom.xml添加對(duì)project.test1的依賴
<dependency><groupId>com.project</groupId><artifactId>project.test1</artifactId><version>0.0.1-SNAPSHOT</version> </dependency>test1必須先安裝到本地庫(kù),否則編譯test2時(shí)會(huì)拋異常
- 直接依賴和間接依賴
- test2 依賴 test1,test3依賴test2
- test2 直接依賴 test1,test3間接依賴test1
- 當(dāng)?shù)诙蕾嚨姆秶莄ompile的時(shí)候,依賴可以傳遞
- 當(dāng)?shù)诙苯右蕾嚨姆秶莟est的時(shí)候,依賴不會(huì)得以傳遞
依賴沖突
假如test1使用junit4.10依賴,并且scope是compile,那test2,test3都可以使用test1的junit4.10,因?yàn)閭鬟f下來了
假如test2使用junit4.9依賴,那test3會(huì)使用【就近的一個(gè)依賴】,也就是使用junit4.9
可選依賴
<optional> true/false<optional> 是否可選,也可以理解為是否向下傳遞。
在依賴中添加optional選項(xiàng)決定此依賴是否向下傳遞,如果是true則不傳遞,如果是false就傳遞,默認(rèn)為false
project…test2的pom.xml 文件:
<dependency><groupId>com.project</groupId><artifactId>project.test1</artifactId><version>0.0.1-SNAPSHOT</version><optional> true<optional> </dependency>排除依賴
exclusions可用于排除依賴,注意exclusions是寫在dependency中
<dependency><groupId>com.project</groupId><artifactId>project.test2</artifactId><version>0.0.1-SNAPSHOT</version><!--排除test2中test1的依賴 --><exclusions><exclusion><groupId>com.project</groupId><artifactId>project.test1</artifactId></exclusion></exclusions> </dependency>maven繼承
繼承
繼承是為了消除重復(fù),可以把很多相同的配置提取出來。例如:grouptId,version等
假設(shè)目前有四個(gè)maven項(xiàng)目,分別是project.parent、project.test1、project.test2、project.test3
要求test1、test2、test3整合到一個(gè)項(xiàng)目,并且從project.parent繼承依賴
執(zhí)行clean compile 進(jìn)行驗(yàn)證,會(huì)同時(shí)編譯test1、test2、test3三個(gè)項(xiàng)目
會(huì)自動(dòng)繼承父類的依賴jar
在父工程中通過配置dependencies依賴,子工程可以直接繼承使用
如果把父類依賴放在<dependencyManagement>中管理,則子類不會(huì)自動(dòng)成父類的依賴
project.parent的pom.xml 文件:
<parent><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency></dependencies></dependencyManagement> </parent>總結(jié)
以上是生活随笔為你收集整理的maven项目的依赖、继承管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫对json数据解析爬取
- 下一篇: Spring Boot集成Dubbo多模