Maven Scope 取值范圍小結(jié)
在Maven項(xiàng)目的pom.xml文件中,通常會(huì)給dependency設(shè)置scope屬性,規(guī)定依賴jar包的使用范圍。
scope有以下5個(gè)取值:
1、compile(默認(rèn)值)
- 被依賴項(xiàng)目需要參與到當(dāng)前項(xiàng)目的編譯。
- 適用于所有階段:測(cè)試,打包,運(yùn)行。
2、provided:
- 含義:被依賴項(xiàng)目理論上可以參與編譯、測(cè)試、運(yùn)行等階段,相當(dāng)于compile,但是在打包階段做了exclude的動(dòng)作。
- 適用場(chǎng)景:例如, 如果我們?cè)陂_發(fā)一個(gè)web 應(yīng)用,在編譯時(shí)我們需要依賴 servlet-api.jar,但是在運(yùn)行時(shí)我們不需要該 jar 包,因?yàn)檫@個(gè) jar 包已由應(yīng)用服務(wù)器提供,此時(shí)我們需要使用 provided 進(jìn)行范圍修飾(JDK 或者一個(gè)容器已提供該依賴)。
3、test
- 含義:表示被依賴項(xiàng)目?jī)H僅參與測(cè)試相關(guān)的工作
- 適用階段:適用于測(cè)試階段的編譯、運(yùn)行,項(xiàng)目打包時(shí)不會(huì)加入
- 適用場(chǎng)景:如junit
4、runtime
- 適用階段:運(yùn)行、測(cè)試,編譯階段不適用
- 適用場(chǎng)景:例如,在編譯的時(shí)候我們不需要 JDBC API 的 jar 包,而在運(yùn)行的時(shí)候我們才需要 JDBC 驅(qū)動(dòng)包。
5、system
- system 元素與 provided 元素類似,但是被依賴項(xiàng)不會(huì)從 maven 倉(cāng)庫(kù)中查找,而是從本地系統(tǒng)中獲取,systemPath 元素用于制定本地系統(tǒng)中 jar 文件的路徑
6、import
它只使用在<dependencyManagement>
中,表示從其它的pom中導(dǎo)入dependency的配置,例如 (B項(xiàng)目導(dǎo)入A項(xiàng)目中的包配置):
想必大家在做SpringBoot應(yīng)用的時(shí)候,都會(huì)有如下代碼:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent>
繼承一個(gè)父模塊,然后再引入相應(yīng)的依賴。
假如說,我不想繼承,或者我想繼承多個(gè),怎么做?
我們知道Maven的繼承和Java的繼承一樣,是無法實(shí)現(xiàn)多重繼承的,如果10個(gè)、20個(gè)甚至更多模塊繼承自同一個(gè)模塊,那么按照我們之前的做法,這個(gè)父模塊的dependencyManagement會(huì)包含大量的依賴。如果你想把這些依賴分類以更清晰的管理,那就不可能了,import scope依賴能解決這個(gè)問題。你可以把dependencyManagement放到單獨(dú)的專門用來管理依賴的pom中
,然后在需要使用依賴的模塊中通過import scope依賴
,就可以引入dependencyManagement
。例如可以寫這樣一個(gè)用于依賴管理的pom:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.test.sample</groupId> <artifactId>base-parent1</artifactId> <packaging>pom</packaging> <version>1.0.0-SNAPSHOT</version> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> <version>4.8.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> </dependencyManagement> </project>
然后我就可以通過非繼承的方式來引入這段依賴管理配置
<dependencyManagement> <dependencies> <dependency> <groupId>com.test.sample</groupId> <artifactid>base-parent1</artifactId> <version>1.0.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> </dependency>
注意:import scope只能用在dependencyManagement里面
這樣,父模塊的pom就會(huì)非常干凈,由專門的packaging為pom來管理依賴,也契合的面向?qū)ο笤O(shè)計(jì)中的單一職責(zé)原則。此外,我們還能夠創(chuàng)建多個(gè)這樣的依賴管理pom,以更細(xì)化的方式管理依賴。這種做法與面向?qū)ο笤O(shè)計(jì)中使用組合而非繼承也有點(diǎn)相似的味道。
那么,如何用這個(gè)方法來解決SpringBoot的那個(gè)繼承問題呢?
配置如下:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.3.3.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
這樣配置的話,自己的項(xiàng)目里面就不需要繼承SpringBoot的module了,而可以繼承自己項(xiàng)目的module了。
到此這篇關(guān)于Maven Scope 取值范圍的文章就介紹到這了,更多相關(guān)Maven Scope 取值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項(xiàng)目集成Flyway進(jìn)行數(shù)據(jù)庫(kù)版本控制的詳細(xì)教程
這篇文章主要介紹了SpringBoot項(xiàng)目集成Flyway進(jìn)行數(shù)據(jù)庫(kù)版本控制,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java實(shí)現(xiàn)求解一元n次多項(xiàng)式的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)求解一元n次多項(xiàng)式的方法,涉及java高斯消元法處理矩陣運(yùn)算解多項(xiàng)式的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01詳解PowerDesigner之CDM、PDM、SQL之間轉(zhuǎn)換
這篇文章主要介紹了詳解PowerDesigner之CDM、PDM、SQL之間轉(zhuǎn)換的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10MyBatis insert語句返回主鍵和selectKey標(biāo)簽方式
這篇文章主要介紹了MyBatis insert語句返回主鍵和selectKey標(biāo)簽方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot攔截器實(shí)現(xiàn)對(duì)404和500等錯(cuò)誤的攔截
本篇文章主要介紹了SpringBoot攔截器實(shí)現(xiàn)對(duì)404和500等錯(cuò)誤的攔截,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04