一橡娄、scope作用域介紹
Maven的一個(gè)哲學(xué)是約定大于配置拔莱,所以在maven中立美,很多內(nèi)容都有默認(rèn)值棕所,scope的默認(rèn)值是compile。
scope元素的作用:控制 dependency(依賴)元素的使用范圍悯辙。通俗的講琳省,就是控制 Jar 包在哪些范圍被加載和使用。這個(gè)范圍包括躲撰,編譯针贬、測(cè)試、運(yùn)行拢蛋,并且還可以加上是否被打入包中桦他。
二、Scope分類
Scope的作用域范圍包括compile谆棱、test快压、provided、runtime垃瞧、system蔫劣、import。
1. compile
此范圍為默認(rèn)依賴范圍个从,是一個(gè)比較強(qiáng)的依賴脉幢,適用于所有階段歪沃。
這些dependencie(依賴)的jar,會(huì)傳遞到其他依賴的上層項(xiàng)目中嫌松。
由于運(yùn)行時(shí)需要所以編譯范圍的依賴會(huì)被打包沪曙,會(huì)隨著項(xiàng)目一起發(fā)布。
范圍:編譯萎羔、測(cè)試液走、運(yùn)行(部署)都有效 。
2. test
表示被依賴項(xiàng)目?jī)H僅參與測(cè)試相關(guān)的工作贾陷,在編譯和運(yùn)行時(shí)都不需要育灸,只在編譯測(cè)試代碼或者運(yùn)行測(cè)試代碼的時(shí)候才能使用該依賴。比較典型的如junit昵宇。
由于運(yùn)行時(shí)不需要所以test范圍依賴不會(huì)被打包磅崭。
范圍:僅測(cè)試有效
3. provided
provided依賴在編譯和測(cè)試時(shí)需要,在運(yùn)行時(shí)不需要瓦哎。
正因?yàn)檫\(yùn)行時(shí)無(wú)效砸喻,可以防止和tomcat下jar沖突,因?yàn)閟ervlet api被tomcat容器提供蒋譬,就不需要maven再重復(fù)引入割岛。
由于運(yùn)行時(shí)不需要所以provided范圍依賴不會(huì)被打包。
范圍:編譯犯助、測(cè)試有效癣漆。
4. runtime
runtime依賴在運(yùn)行和測(cè)試的時(shí)候需要,但在編譯的時(shí)候不需要剂买。與compile相比惠爽,被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯。
比如:jdbc的驅(qū)動(dòng)包瞬哼,項(xiàng)目主代碼的編譯只需要JDK提供的JDBC接口婚肆,只有在執(zhí)行測(cè)試或者運(yùn)行項(xiàng)目的時(shí)候才需要實(shí)現(xiàn)上述接口的具體JDBC驅(qū)動(dòng)。
由于運(yùn)行時(shí)需要所以runtime范圍的依賴會(huì)被打包坐慰。
范圍:測(cè)試较性、運(yùn)行有效。
5. system
- system范圍依賴與provided類似结胀,但是你必須顯式的提供一個(gè)位于本地系統(tǒng)中JAR文件的路徑赞咙,需要指定systemPath磁盤路徑,system依賴不推薦使用糟港。
<dependency>
<groupId>org.learn.ocr</groupId>
<artifactId>ocr-core</artifactId>
<version>1.6.8</version>
<scope>system</scope>
<systemPath>${basedir}/Webcontent/WEB-INF/1ib/ocr-core.jar</systemPath>
</dependency>
- 范圍:測(cè)試攀操、運(yùn)行有效
三、總結(jié)
依賴范圍由強(qiáng)到弱的順序是:compile>provided>runtime>test
由于system依賴不怎么推薦使用着逐。下面排序就不排入了崔赌,如果排序和provided并排。
Tips:自從maven 2.0.9以后耸别,在<dependencyManagement>管理下健芭,多了一種依賴的scope,是import秀姐,這個(gè)以后在進(jìn)行詳細(xì)講解慈迈。