maven scope使用和理解

在Maven的依賴管理中,常常會用到依賴的scope設置。這裏整理下各類scope的使用場景和說明,以及在使用中的實踐心得。api

 

scope的使用場景和說明tomcat

1.compilejsp

編譯範圍,默認scope,在工程環境的classpath(編譯環境)和打包(若是是WAR包,會包含在WAR包中)時候都有效。ide

 

2.provided單元測試

容器或JDK已提供範圍,表示該依賴包已經由目標容器(如tomcat)和JDK提供,只在編譯的classpath中加載和使用,打包的時候不會包含在目標包中。最多見的是j2ee規範相關的servlet-api和jsp-api等jar包,通常由servlet容器提供,無需在打包到war包中,若是不配置爲provided,把這些包打包到工程war包中,在tomcat6以上版本會出現衝突沒法正常運行程序(版本不符的狀況)。測試

 

3.runtimespa

通常是運行和測試環境使用,編譯時候不用加入classpath,打包時候會打包到目標包中。通常是經過動態加載或接口反射加載的狀況比較多。也就是說程序只使用了接口,具體的時候可能有多個,運行時經過配置文件或jar包掃描動態加載的狀況。典型的包括:JDBC驅動等。繼承

 

4.test接口

測試範圍,通常是單元測試場景使用,在編譯環境加入classpath,但打包時不會加入,如junit等。servlet

 

5.system

系統範圍,與provided相似,只是標記爲該scope的依賴包須要明確指定基於文件系統的jar包路徑。由於須要經過systemPath指定本地jar文件路徑,因此該scope是不推薦的。若是是基於組織的,通常會創建本地鏡像,會把本地的或組織的基礎組件加入本地鏡像管理,避過使用該scope的狀況。

 

 實踐:

  • provided是沒有傳遞性的,也就是說,若是你依賴的某個jar包,它的某個jar的範圍是provided,那麼該jar不會在你的工程中依靠jar依賴傳遞加入到你的工程中。
  • provided具備繼承性,上面的狀況,若是須要統一配置一個組織的通用的provided依賴,可使用parent,而後在全部工程中繼承。
相關文章
相關標籤/搜索