Maven的依賴是使用Maven坐標來定位的,而Maven坐標主要由GAV(groupId, artifactId, version)構成。因此,使用任何一個依賴之間,你都需要知道它的Maven坐標。
http://www.mvnrepository.com 在這里可以找到很多的依賴坐標。
1、依賴 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
groupId,必選,實際隸屬項目
artifactId,必選,其中的模塊
version必選,版本號
type可選,依賴類型,默認jar,還有一個比較特殊的,好像是以axi開頭的,用的是mar
scope可選,依賴范圍,默認compile還有test,provided,runtime,system
optional可選,標記依賴是否可選,默認false
exclusion可選,排除傳遞依賴性,默認空
2、scope的幾個范圍
compile:編譯,測試,運行
test:測試
provided :編譯,測試
runtime:運行
system:system:編譯,測試,同provided,但必須指定systemPath,網上都說-慎用。。。
3、scope范圍的測試

maven自動從倉庫下載相關的包

打包后,

打的war包中,只有log4j和freemarker的包了。
所以,拿網上的總結..
1.compile
編譯范圍,默認scope,在工程環境的classpath(編譯環境)和打包(如果是WAR包,會包含在WAR包中)時候都有效。
2.provided
容器或JDK已提供范圍,表示該依賴包已經由目標容器(如tomcat)和JDK提供,只在編譯的classpath中加載和使用,打包的時候不會包含在目標包中。最常見的是j2ee規范相關的servlet-api和jsp-api等jar包,一般由servlet容器提供,無需在打包到war包中,如果不配置為provided,把這些包打包到工程war包中,在tomcat6以上版本會出現沖突無法正常運行程序(版本不符的情況)。
3.runtime
一般是運行和測試環境使用,編譯時候不用加入classpath,打包時候會打包到目標包中。一般是通過動態加載或接口反射加載的情況比較多。也就是說程序只使用了接口,具體的時候可能有多個,運行時通過配置文件或jar包掃描動態加載的情況。典型的包括:JDBC驅動等。
4.test
測試范圍,一般是單元測試場景使用,在編譯環境加入classpath,但打包時不會加入,如junit等。
5.system(還未測試,一般用不到)
系統范圍,與provided類似,只是標記為該scope的依賴包需要明確指定基於文件系統的jar包路徑。因為需要通過systemPath指定本地jar文件路徑,所以該scope是不推薦的。如果是基於組織的,一般會建立本地鏡像,會把本地的或組織的基礎組件加入本地鏡像管理,避過使用該scope的情況。
資料:
1. http://blog.csdn.net/lastsweetop/article/details/8493475
2. http://juvenshun.iteye.com/blog/269094
3.http://acooly.iteye.com/blog/1788890
