一、scop的分類
- compile:默認(rèn)值 他表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯,還有后續(xù)的測(cè)試,運(yùn)行周期也參與其中,是一個(gè)比較強(qiáng)的依賴。打包的時(shí)候通常需要包含進(jìn)去
- test:依賴項(xiàng)目?jī)H僅參與測(cè)試相關(guān)的工作,包括測(cè)試代碼的編譯和執(zhí)行,不會(huì)被打包,例如:junit
- runtime:表示被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯,不過(guò)后期的測(cè)試和運(yùn)行周期需要其參與。與compile相比,跳過(guò)了編譯而已。例如JDBC驅(qū)動(dòng),適用運(yùn)行和測(cè)試階段
- provided:打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施會(huì)提供。事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測(cè)試,運(yùn)行等周期。相當(dāng)于compile,但是打包階段做了exclude操作
- system:從參與度來(lái)說(shuō),和provided相同,不過(guò)被依賴項(xiàng)不會(huì)從maven倉(cāng)庫(kù)下載,而是從本地文件系統(tǒng)拿。需要添加systemPath的屬性來(lái)定義路徑
二、scope的依賴傳遞
-
A依賴B,B依賴C。當(dāng)前項(xiàng)目為A,只當(dāng)B在A項(xiàng)目中的scope,那么c在A中的scope是如何得知呢?
當(dāng)C是test或者provided時(shí),C直接被丟棄,A不依賴C;(排除傳遞依賴)
否則A依賴C,C的scope繼承與B的scope