Maven新增依賴時scope域介紹
阿新 • • 發佈:2020-09-18
1. 當你把專案打成war包時
eg:以下面依賴為例:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
分析:
scope=provided,這個servlet-jar依賴(或者說 servlet-jar包),不會出現在WEB-INFO/lib目錄下,即該servlet-jar依賴不會打進專案war中。
scope=compile,這個servlet-jar依賴(或者說 servlet-jar包) ,會放到WEB-INFO/lib目錄,即該servlet-jar依賴會打進專案war中。
2.scope常用作用域
2.1 compile,預設預設值,在所有階段都需要,會打進專案war包。
2.2 runtime,執行和測試時需要,編譯時不需要。如JDBC驅動,適用執行和測試階段,會打進專案war包。
2.3 provided,編譯時需要該依賴,不會打進專案war包。
例如, 如果你開發了一個web 應用,你可能在編譯時需要Servlet.jar來編譯一個servlet,但你不想在專案打成WAR的中包含這個Servlet.jar;多數情況下,這個Servlet.jar由你部署的應用伺服器或容器提供。
2.4 test,只在測試時需要,用於編譯和執行測試程式碼。不會打進專案war包。
2.5 system,需要顯式提供依賴的jar包位置。不會打進專案war包。
(PS:Maven不會在倉庫Repository中查詢它,一般搭配systempath="你需要的本地系統中jar包的路徑"一起使用,這麼做是為了允許基於本地物件編譯,而這些本地物件是系統類庫的一部分。注意該範圍是不推薦使用的,你應該一直儘量去從公共或定製的 Maven 倉庫中引用所需依賴)。