【Maven】Maven之scope依賴範圍

1、理解Maven scope依賴範圍的做用java

Maven在編譯項目主代碼的時候須要使用一套classspath。總共有三種classpath,分別對應於Maven編譯項目主代碼的時候、Maven編譯和執行測試的時候、實際運行Maven項目的時候。spring

  • Compile: 編澤依賴範圍.若是沒有指定,就會默認使用該依賴範圍。使用此依賴範圍的Maven依賴,對於編譯、測試、運行三種classpath都有效。好比spring-core依賴,在編輯、測試、運行的時候都須要使用該依賴。
  • test: 測試依賴範圍。使用此依賴範圍的Maven依賴,只對測試的classpath有效,在編譯主代碼或者運行項目時沒法使用此類依賴。好比JUnit的依賴,它只有在編譯測試代碼及運行測試的時候須要
  • provided:以提供依賴範圍。使用此依賴範圍的Maven依賴,對於編譯和測試的classpath有效,但在運行時無效。好比servlet-api,編譯和測試項目的時候須要用到該依賴,但在運行項目的時候,因爲容器已經提供,就不須要Maven重複的引入一遍。
  • runtime:運行時依賴範圍。使用此依賴範圍的Maven依賴,對於測試和運行classpath有效,但在編譯主代碼時無效。好比JDBC驅動的實現,項目主代碼編譯的時候,只須要JDK提供的JDBC接口就能夠,可是在執行測試或者運行項目的時候才須要實現實現JDBC接口的具體JDBC驅動。
  • import:scope=import,type=pom表示在此pom中引入spring-boot-dependencies的pom的全部內容,注意只能在dependencyManagement中使用。
  • system:系統依賴範圍。該依賴與三種classpath的關係,和provided依賴範圍徹底一致。只是,使用system範圍依賴時,須要指定systemPath元素顯示地指定依賴文件的路徑。因爲此依賴不是Maven倉庫解析的,並且每每與本機系統綁定,可能形成構建的不可遺址,所以不建議使用。systemPath元素能夠引用環境變量,如:

<dependency>
  <groupId>javax.sql</groupId>
  <artifactId>jdbc-stdext</artifactId>
  <version>2.0</version>
  <scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

2、依賴範圍與classpath的關係sql

依賴範圍(scope) 對於編譯classpath有效 對於測試classpath有效 對於運行時classpath有效 例子
compile Y Y Y spring-core
test - Y - JUnit
provided Y Y - servlet-api
runtime - Y Y JDBC驅動實現
system Y Y - 本地的,Maven倉庫以外的類庫文件
相關文章
相關標籤/搜索