首先貼出maven依賴配置語法java
<dependencies> <dependency> <groupId></groupId> <artifactId>spring-core</artifactId> <version></version> <type></type> <scope></scope> <optional></optional> <exclusions> <exclusion> </exclusion> <exclusions> </dependency> </dependencies>
groupId,artifactId,version就再也不介紹了,這是基本座標。spring
type爲依賴的類型,scope依賴的範圍,optional標記依賴是否可選,exclusions用來排除傳遞性依賴。api
基礎概念如上,今天重點理解依賴的範圍。maven
在maven構建的時候,會有三套classpath(就比如java的classpath)。在編譯項目主代碼的時候會用到一套classpath,在進行編譯和測試的時候也會用到一套classpath,在真正運行的時候,也會用到一套classpath。ide
依賴的範圍有如下幾種:compile,test,provided,runtime,system,import。測試
其中system通常不推薦,由於從字面意思就能夠了解到引用了系統的環境變量,因此極可能不具有可移植性。spa
compile是默認的依賴範圍。在沒有寫scope的時候,就是指定了compile範圍。code
test,測試依賴範圍。在我以前使用maven的時候,junit的scope就是test。xml
provided,已提供的依賴範圍。此依賴在編譯和測試classpath有效,在運行時無效。就行servlet api,編譯的時候用到了,運行的時候就不須要了。接口
runtime,運行時依賴範圍。此依賴在測試和運行的時候有效,可是在編譯的時候無效。就像jdbc驅動,項目主代碼的編譯只須要提供jdk提供的jdbc驅動,只有在執行測試或者運行項目的時候才須要實現上述接口的具體jdbc驅動。
import,導入依賴範圍。(暫時沒學到)
scope | 編譯 | 測試 | 運行 | example |
compile | Y | Y | Y | spring-core |
test | -- | Y | -- | JUnit |
provided | Y | Y | -- | servlet-api |
runtime | -- | Y | Y | JDBC驅動實現 |
system | Y | Y | -- | 本地的,maven倉庫以外的類庫文件 |