轉(zhuǎn):Maven中Scope含義說明
依賴范圍控制哪些依賴在哪些classpath 中可用惊楼,哪些依賴包含在一個(gè)應(yīng)用中。讓我們?cè)敿?xì)看一下每一種范圍:
compile (編譯范圍)
compile是默認(rèn)的范圍琅轧;如果沒有提供一個(gè)范圍猎提,那該依賴的范圍就是編譯范圍厌殉。編譯范圍依賴在所有的classpath 中可用胡桃,
同時(shí)它們也會(huì)被打包踩叭。
provided (已提供范圍)
provided 依賴只有在當(dāng)JDK 或者一個(gè)容器已提供該依賴之后才使用。例如翠胰, 如果你開發(fā)了一個(gè)web 應(yīng)用懊纳,你可能在編譯
classpath 中需要可用的Servlet API 來編譯一個(gè)servlet,但是你不會(huì)想要在打包好的WAR 中包含這個(gè)Servlet API亡容;這個(gè)
Servlet API JAR 由你的應(yīng)用服務(wù)器或者servlet 容器提供。已提供范圍的依賴在編譯classpath (不是運(yùn)行時(shí))可用冤今。它們
不是傳遞性的闺兢,也不會(huì)被打包。
runtime (運(yùn)行時(shí)范圍)
runtime 依賴在運(yùn)行和測(cè)試系統(tǒng)的時(shí)候需要,但在編譯的時(shí)候不需要屋谭。比如脚囊,你可能在編譯的時(shí)候只需要JDBC API JAR,而只
有在運(yùn)行的時(shí)候才需要JDBC 驅(qū)動(dòng)實(shí)現(xiàn)桐磁。
test (測(cè)試范圍)
test范圍依賴 在一般的編譯和運(yùn)行時(shí)都不需要悔耘,它們只有在測(cè)試編譯和測(cè)試運(yùn)行階段可用。
system (系統(tǒng)范圍)
system范圍依賴與provided 類似我擂,但是你必須顯式的提供一個(gè)對(duì)于本地系統(tǒng)中JAR 文件的路徑衬以。這么做是為了允許基于本地
對(duì)象編譯,而這些對(duì)象是系統(tǒng)類庫的一部分校摩。這樣的構(gòu)件應(yīng)該是一直可用的看峻,Maven 也不會(huì)在倉庫中去尋找它。如果你將一個(gè)
依賴范圍設(shè)置成系統(tǒng)范圍衙吩,你必須同時(shí)提供一個(gè) systemPath 元素互妓。注意該范圍是不推薦使用的(你應(yīng)該一直盡量去從公共或
定制的 Maven 倉庫中引用依賴)。