在 Pom4 中,dependency 元素中引入了 scope 元素,這是一個很重要的屬性。在Maven 項目中 Jar 包衝突、類型轉換異常的很大緣由是因爲 scope 元素使用不當形成的。
scope 元素的做用:控制 dependency 元素的使用範圍。通俗的講,就是控制 Jar 包在哪些範圍被加載和使用。
scope 包含五個值,具體含義以下:web
compile(編譯)
含義:compile 是默認值,若是沒有指定 scope 值,該元素的默認值爲 compile。被依賴項目須要參與到當前項目的編譯,測試,打包,運行等階段。打包的時候一般會包含被依賴項目。api
provided(已提供的)
含義:被依賴項目理論上能夠參與編譯、測試、運行等階段,至關於compile,可是再打包階段作了exclude的動做。
適用場景:例如, 若是咱們在開發一個web 應用,在編譯時咱們須要依賴 servlet-api.jar,可是在運行時咱們不須要該 jar 包,由於這個 jar 包已由應用服務器提供,此時咱們須要使用 provided 進行範圍修飾。服務器
runtime(運行時)
含義:表示被依賴項目無需參與項目的編譯,可是會參與到項目的測試和運行。與compile相比,被依賴項目無需參與項目的編譯。
適用場景:例如,在編譯的時候咱們不須要 JDBC API 的 jar 包,而在運行的時候咱們才須要 JDBC 驅動包。maven
test(測試)
含義: 表示被依賴項目僅僅參與測試相關的工做,包括測試代碼的編譯,執行。
適用場景:例如,Junit 測試。ide
system(系統)
含義:system 元素與 provided 元素相似,可是被依賴項不會從 maven 倉庫中查找,而是從本地系統中獲取,systemPath 元素用於制定本地系統中 jar 文件的路徑。也就是說,在編譯時使用 systemPath 元素指定的 jar 包,在運行時由應用服務器提供 jar 包。
適用場景:項目中存在自定義的基礎組件服務時使用。例如:測試
<dependency>
<groupId>org.open</groupId>
<artifactId>open-core</artifactId>
<version>1.5</version>
<scope>system</scope>
<systemPath>${basedir}/WebContent/WEB-INF/lib/open-core.jar</systemPath>
</dependency>
————————————————
版權聲明:本文爲CSDN博主「那是2008」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/claram/article/details/77646263.net