Maven Scope 依賴範圍

Maven依賴範圍就是用來控制依賴與這三種classpath(編譯classpath、測試classpath、運行classpath)的關係,Maven有如下幾種依賴範圍:java

·compile:編譯依賴範圍。若是沒有指定,就會默認使用該依賴範圍。使用此依賴範圍的Maven依賴,對於編譯、測試、運行三種classpath都有效。典型的例子是spring-core,在編譯、測試和運行的時候都須要使用該依賴。spring

·test:測試依賴範圍。使用此依賴範圍的Maven依賴,只對於測試classpath有效,在編譯主代碼或者運行項目的使用時將沒法使用此類依賴。典型的例子是JUnit,它只有在編譯測試代碼及運行測試的時候才須要。api

·provided:已提供依賴範圍。使用此依賴範圍的Maven依賴,對於編譯和測試classpath有效,但在運行時無效。典型的例子是servlet-api,編譯和測試項目的時候須要該依賴,但在運行項目的時候,因爲容器已經提供,就不須要Maven重複地引入一遍。ide

·runtime:運行時依賴範圍。使用此依賴範圍的Maven依賴,對於測試和運行classpath有效,但在編譯主代碼時無效。典型的例子是JDBC驅動實現,項目主代碼的編譯只須要JDK提供的JDBC接口,只有在執行測試或者運行項目的時候才須要實現上述接口的具體JDBC驅動。測試

·system:系統依賴範圍。該依賴與三種classpath的關係,和provided依賴範圍徹底一致。可是,使用system範圍的依賴時必須經過systemPath元素顯式地指定依賴文件的路徑。因爲此類依賴不是經過Maven倉庫解析的,並且每每與本機系統綁定,可能形成構建的不可移植,所以應該謹慎使用。systemPath 元素能夠引用環境變量, 如:spa

1 <dependency>
2     <groupId>com.alipay</groupId>
3     <artifactId>alipay-sdk</artifactId>
4     <version>1.0.0</version>
5     <scope>system</scope>
6     <systemPath>${project.basedir}/lib/alipay-sdk-java20170818173712.jar</systemPath>
7 </dependency>

·import( Maven 2. 0. 9 及 以上):導入依賴範圍。該依賴範圍不會對三種 classpath 產生實際的影響。code

相關文章
相關標籤/搜索