淺談maven中的scope,systempath

scope  maven中scope的默認值是compileweb

scope的分類oracle

1)compile 默認是compile。compile表示被依賴項目須要參與當前項目的編譯,包括後續的測試,運行週期也參與其中,是一個比較強的依賴。打包的時候一般須要包含進去。maven

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

3)runtime 表示被依賴項目無需參與項目的編譯,不事後期的測試和運行週期須要其參與。與compile相比,跳過編譯而已。在終端的項目(非開源,企業內部系統)中,和compile區別不是很大。比較常見的如JSRXXX的實現,對應的API jar是compile,具體實現是runtime的,compile只須要知道接口就足夠了。oracle jdbc驅動jar包就是一個很好的例子,通常scope爲runtime。  另runtime的依賴一般和optional搭配使用,optional爲true。便可以用A實現也能夠用B實現。測試

4)procided 意味着打包的時候能夠不用包進去,別的設施(web container)會提供。事實上該依賴理論上能夠參與編譯、測試、運行等週期。至關於compile,可是打包階段作了exclude的動做。spa

5)system 和provide相同,不過被依賴項不會從maven倉庫抓,而是從本地系統文件拿,必定要配合systemPath使用rest

 

systempathcode

當maven依賴本地而非repository中的jar包,sytemPath指明本地jar包路徑blog

  參考:接口

複製代碼
<dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.5</version> <scope>system</scope> <systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath> </dependency>
複製代碼
相關文章
相關標籤/搜索