依賴項的作用域
在定義項目的依賴項的時候,我們可以通過scope來指定該依賴項的作用范圍。scope的取值有compile、runtime、test、provided、system和import。
compile:這是依賴項的默認作用范圍,即當沒有指定依賴項的scope時默認使用compile。compile范圍內的依賴項在所有情況下都是有效的,包括運行、測試和編譯時。
runtime:表示該依賴項只有在運行時才是需要的,在編譯的時候不需要。這種類型的依賴項將在運行和test的類路徑下可以訪問。
test:表示該依賴項只對測試時有用,包括測試代碼的編譯和運行,對於正常的項目運行是沒有影響的。
provided:表示該依賴項將由JDK或者運行容器在運行時提供,也就是說由Maven提供的該依賴項我們只有在編譯和測試時才會用到,而在運行時將由JDK或者運行容器提供。
system:當scope為system時,表示該依賴項是我們自己提供的,不需要Maven到倉庫里面去找。指定scope為system需要與另一個屬性元素systemPath一起使用,它表示該依賴項在當前系統的位置,使用的是絕對路徑。比如官網給出了一個關於使用JDK的tools.jar的例子:
<project> ... <dependencies> <dependency> <groupId>sun.jdk</groupId> <artifactId>tools</artifactId> <version>1.5.0</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> </dependencies> ... </project>
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6</version> <scope>system</scope> <systemPath>D:\SC\WORK\coding\ea\ea-web/src/main/webapp/WEB-INF/lib/fastjson-1.2.6.jar</systemPath> </dependency>