Maven的依賴構件包含一個依賴範圍屬性,這個屬性描述的是三套classpath的控制,即編譯、測試、運行。
舉個例子Junit依賴只是在測試範圍(classpath)使用,而在運行的時候不使用,還有Servlet api在編譯的時候使用,在運行部署的時候不使用,因爲大部分容器都已經提供該依賴支持。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
下面對Maven依賴範圍進行逐一說明:
1. compile: 編譯依賴範圍。
默認的依賴範圍,使用此依賴範圍會對編譯、測試、運行三套classpath都有效。
2. test: 測試依賴範圍。
使用此依賴範圍只會對測試有效。比如 Junit
3. provided: 已提供的依賴範圍。
使用此依賴範圍會對編譯和測試有效,對運行無效。比如 Servlet-api ,運行的時候容器已經提供
4. runtime: 運行時的依賴範圍。
使用此依賴範圍會對測試和運行有效,對於編譯無效。 比如 JDBC驅動依賴
5. system: 系統依賴範圍。
和provided依賴範圍完全一樣,由於此類依賴不是通過Maven倉庫解析的,而是和本機系統綁定的,使用後可能會造成不可移植性,請謹慎使用此種依賴範圍。
6. import: 導入依賴範圍。
該依賴不會對三套classpath產生影響。這種依賴範圍只會在<dependencyManagement>標籤中使用,意思是說使用此種依賴範圍通常是指向一個POM類型的Maven項目,將依賴一個POM類型的項目中的所有依賴全部導入到目標項目中來,是除了複製依賴、繼承依賴的另外一種使用依賴的方式,可以說Maven還是非常的靈活的。