Maven 的 Scope 区别,你知道吗?
??點(diǎn)擊上方?好好學(xué)java?,選擇?星標(biāo)?公眾號(hào)
重磅資訊、干貨,第一時(shí)間送達(dá) 今日推薦:一個(gè)線程池 bug 引發(fā)的 GC 思考!個(gè)人原創(chuàng)+1博客:點(diǎn)擊前往,查看更多 鏈接:https://segmentfault.com/a/11900000220394461、依賴的Scope
scope定義了類包在項(xiàng)目的使用階段。項(xiàng)目階段包括: 編譯,運(yùn)行,測(cè)試和發(fā)布。
2、分類說明
compile
默認(rèn)scope為compile,表示為當(dāng)前依賴參與項(xiàng)目的編譯、測(cè)試和運(yùn)行階段,屬于強(qiáng)依賴。打包之時(shí),會(huì)達(dá)到包里去
test
該依賴僅僅參與測(cè)試相關(guān)的內(nèi)容,包括測(cè)試用例的編譯和執(zhí)行,比如定性的Junit。
runtime
依賴僅參與運(yùn)行周期中的使用。一般這種類庫都是接口與實(shí)現(xiàn)相分離的類庫,比如JDBC類庫,在編譯之時(shí)僅依賴相關(guān)的接口,在具體的運(yùn)行之時(shí),才需要具體的mysql、oracle等等數(shù)據(jù)的驅(qū)動(dòng)程序。 此類的驅(qū)動(dòng)都是為runtime的類庫。
provided
該依賴在打包過程中,不需要打進(jìn)去,這個(gè)由運(yùn)行的環(huán)境來提供,比如tomcat或者基礎(chǔ)類庫等等,事實(shí)上,該依賴可以參與編譯、測(cè)試和運(yùn)行等周期,與compile等同。區(qū)別在于打包階段進(jìn)行了exclude操作。
system
使用上與provided相同,不同之處在于該依賴不從maven倉庫中提取,而是從本地文件系統(tǒng)中提取,其會(huì)參照systemPath的屬性進(jìn)行提取依賴。
import
這個(gè)是maven2.0.9版本后出的屬性,import只能在dependencyManagement的中使用,能解決maven單繼承問題,import依賴關(guān)系實(shí)際上并不參與限制依賴關(guān)系的傳遞性。
3、systemPath
當(dāng)maven依賴本地而非repository中的jar包,sytemPath指明本地jar包路徑,例如:
<dependency><groupid>org.hamcrest</groupid><artifactid>hamcrest-core</artifactid><version>1.5</version><scope>system</scope><systempath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systempath> </dependency>4、dependency中的type
引入某一個(gè)依賴時(shí),必須指定type,這是因?yàn)橛糜谄ヅ鋎ependency引用和dependencyManagement部分的最小信息集實(shí)際上是{groupId,artifactId,type,classifier}。在很多情況下,這些依賴關(guān)系將引用沒有classifier的jar依賴。這允許我們將標(biāo)識(shí)設(shè)置為{groupId,artifactId},因?yàn)閠ype的默認(rèn)值是jar,并且默認(rèn)classifier為null。 type的值一般有jar、war、pom等,聲明引入的依賴的類型
5、dependency中的classifier
Classifier可能是最容易被忽略的Maven特性,但它確實(shí)非常重要,我們也需要它來幫助規(guī)劃坐標(biāo)。設(shè)想這樣一個(gè)情況,有一個(gè)jar項(xiàng)目,就說是 dog-cli-1.0.jar 吧,運(yùn)行它用戶就能在命令行上畫一只小狗出來。現(xiàn)在用戶的要求是希望你能提供一個(gè)zip包,里面不僅包含這個(gè)可運(yùn)行的jar,還得包含源代碼和文檔,換句話說,這是比較正式的分發(fā)包。這個(gè)文件名應(yīng)該是怎樣的呢?dog-cli-1.0.zip?不夠清楚,僅僅從擴(kuò)展名很難分辨什么是Maven默認(rèn)生成的構(gòu)件,什么是額外配置生成分發(fā)包。如果能是dog-cli-1.0-dist.zip就最好了。這里的dist就是classifier,默認(rèn)Maven只生成一個(gè)構(gòu)件,我們稱之為主構(gòu)件,那當(dāng)我們希望Maven生成其他附屬構(gòu)件的時(shí)候,就能用上classifier。常見的classifier還有如dog-cli-1.0-sources.jar表示源碼包,dog-cli-1.0-javadoc.jar表示JavaDoc包等等。 classifier它表示在相同版本下針對(duì)不同的環(huán)境或者jdk使用的jar,如果配置了這個(gè)元素,則會(huì)將這個(gè)元素名在加在最后來查找相應(yīng)的jar,例如:
<classifier>jdk17</classifier> <classifier>jdk18</classifier>總結(jié)
以上是生活随笔為你收集整理的Maven 的 Scope 区别,你知道吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringSecurity-短信验证码
- 下一篇: Java程序员必备基础:Java代码是怎