既然,Maven的生命週期存在編譯、測試、運行這些過程,那麼顯然有些依賴只用於測試,好比junit;有些依賴編譯用不到,只有運行的時候才能用到,好比mysql的驅動包在編譯期就用不到(編譯期用的是JDBC接口),而是在運行時用到的;還有些依賴,編譯期要用到,而運行期不須要提供,由於有些容器已經提供了,好比servlet-api在tomcat中已經提供了,咱們只須要的是編譯期提供而已。
總結來講:
compile:默認的scope,運行期有效,須要打入包中。
provided:編譯期有效,運行期不須要提供,不會打入包中。
runtime:編譯不須要,在運行期有效,須要導入包中。(接口與實現分離)
test:測試須要,不會打入包中。
system:非本地倉庫引入、存在系統的某個路徑下的jar。(通常不使用)mysql