maven基礎:依賴範圍

hiekay發表於2018-11-20

compile(編譯範圍)

compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範

圍。編譯範圍依賴在所有的classpath中可用,同時它們也會被打包。

provided(已提供範圍)

provided依賴只有在當JDK或者一個容器已提供該依賴之後才使用。例如,如果

你開發了一個web應用,你可能在編譯classpath中需要可用的Servlet API來編

譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API;這個

Servlet API JAR由你的應用伺服器或者servlet容器提供。已提供範圍的依賴在

編譯classpath(不是執行時)可用。它們不是傳遞性的,也不會被打包。

runtime(執行時範圍)

runtime依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如,你

可能在編譯的時候只需要JDBC API JAR,而只有在執行的時候才需要JDBC驅動實

現。

#### test(測試範圍)

test範圍依賴 在一般的 編譯和執行時都不需要,它們只有在測試編譯和測試運

行階段可用。

#### system(系統範圍)

system範圍依賴與provided類似,但是你必須顯式的提供一個對於本地系統中

JAR檔案的路徑。這麼做是為了允許基於本地物件編譯,而這些物件是系統類庫

的一部分。這樣的構件應該是一直可用的,Maven也不會在倉庫中去尋找它。。如

果你將一個依賴範圍設定成系統範圍,你必須同時提供一個systemPath元素。注

意該範圍是不推薦使用的(你應該一直儘量去從公共或定製的Maven倉庫中引用

依賴)。


相關文章