maven依賴關係中Scope的做用

Dependency Scope 

在POM 4中,<dependency>中還引入了<scope>,它主要管理依賴的部署。目前<scope>能夠使用5個值: 

    * compile,缺省值,適用於全部階段,會隨着項目一塊兒發佈。 
    * provided,相似compile,指望JDK、容器或使用者會提供這個依賴。如servlet.jar。 
    * runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。 
    * test,只在測試時使用,用於編譯和運行測試代碼。不會隨項目發佈。 
    * system,相似provided,須要顯式提供包含依賴的jar,Maven不會在Repository中查找它。web

依賴範圍控制哪些依賴在哪些classpath 中可用,哪些依賴包含在一個應用中。讓咱們詳細看一下每一種範圍:
 
compile (編譯範圍)
 
compile是默認的範圍;若是沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在全部的classpath 中可用,服務器

同時它們也會被打包。
 
provided (已提供範圍)
 
provided 依賴只有在當JDK 或者一個容器已提供該依賴以後才使用。例如, 若是你開發了一個web 應用,你可能在編譯ide

classpath 中須要可用的Servlet API 來編譯一個servlet,可是你不會想要在打包好的WAR 中包含這個Servlet API;這個測試

Servlet API JAR 由你的應用服務器或者servlet 容器提供。已提供範圍的依賴在編譯classpath (不是運行時)可用。它們spa

不是傳遞性的,也不會被打包。
 
runtime (運行時範圍)
 
runtime 依賴在運行和測試系統的時候須要,但在編譯的時候不須要。好比,你可能在編譯的時候只須要JDBC API JAR,而只對象

有在運行的時候才須要JDBC
 驅動實現。
 
test (測試範圍)
 
test範圍依賴 在通常的編譯和運行時都不須要,它們只有在測試編譯和測試運行階段可用。
 
system (系統範圍)
 
system範圍依賴與provided 相似,可是你必須顯式的提供一個對於本地系統中JAR 文件的路徑。這麼作是爲了容許基於本地開發

對象編譯,而這些對象是系統類庫的一部分。這樣的構件應該是一直可用的,Maven 也不會在倉庫中去尋找它。若是你將一個部署

依賴範圍設置成系統範圍,你必須同時提供一個 systemPath 元素。注意該範圍是不推薦使用的(你應該一直儘可能去從公共或servlet

定製的 Maven 倉庫中引用依賴)。it

相關文章
相關標籤/搜索