天天看點

Maven中scope參數詳解

Maven堅持慣例優于配置,是以Maven配置中的socpe的預設值是compile。在實際應用過程中經常分不清楚使用哪一個,是以直接就預設了。現在梳理一下Maven的scope:scope分為compile,test,runntime,provided,system五種。

compile

預設的就是compile,compile表示被依賴項目需要參與目前項目的編譯,當然後續的測試,運作周期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。

test

test表示依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯,執行。比較典型的如junit。

runntime

runntime表示被依賴項目無需參與項目的編譯,不過後期的測試和運作周期需要其參與。與compile相比,跳過編譯,說實話在終端的項目(非開源,企業内部系統)中,和compile差別不是很大。

provided

provided意味着打包的時候可以不用包進去,别的設施(Web Container)會提供。事實上該依賴理論上可以參與編譯,測試,運作等周期。相當于compile,但是在打包階段做了exclude的動作。

system

從參與度來說,也provided相同,不過被依賴項不會從maven倉庫抓,而是從本地檔案系統拿,一定需要配合systemPath屬性使用。

scope的依賴傳遞

A–>B–>C。目前項目為A,A依賴于B,B依賴于C。知道B在A項目中的scope,那麼怎麼知道C在A中的scope呢?答案是:

當C是test或者provided時,C直接被丢棄,A不依賴C;

否則A依賴C,C的scope繼承于B的scope。

Maven中scope參數詳解