MAVEN Scope使用


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

Scope的使用場景和說明
1.compile
編譯范圍,默認scope,在工程環境的classpath(編譯環境)和打包(如果是WAR包,會包含在WAR包中)時候都有效。
 
2.provided
容器或JDK已提供范圍,表示該依賴包已經由目標容器(如tomcat)和JDK提供,只在編譯的classpath中加載和使用,打包的時候不會包含在目標包中。最常見的是j2ee規范相關的servlet-api和jsp-api等jar包,一般由servlet容器提供,無需在打包到war包中,如果不配置為provided,把這些包打包到工程war包中,在tomcat6以上版本會出現沖突無法正常運行程序(版本不符的情況)。
 
3.runtime
一般是運行和測試環境使用,編譯時候不用加入classpath,打包時候會打包到目標包中。一般是通過動態加載或接口反射加載的情況比較多。也就是說程序只使用了接口,具體的時候可能有多個,運行時通過配置文件或jar包掃描動態加載的情況。典型的包括:JDBC驅動等。
 
4.test
測試范圍,一般是單元測試場景使用,在編譯環境加入classpath,但打包時不會加入,如junit等。
 
5.system
系統范圍,與provided類似,只是標記為該scope的依賴包需要明確指定基於文件系統的jar包路徑。因為需要通過systemPath指定本地jar文件路徑,所以該scope是不推薦的。如果是基於組織的,一般會建立本地鏡像,會把本地的或組織的基礎組件加入本地鏡像管理,避過使用該scope的情況。
 
實踐:
  • provided是沒有傳遞性的,也就是說,如果你依賴的某個jar包,它的某個jar的范圍是provided,那么該jar不會在你的工程中依靠jar依賴傳遞加入到你的工程中。
  • provided具有繼承性,上面的情況,如果需要統一配置一個組織的通用的provided依賴,可以使用parent,然后在所有工程中繼承。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM