1、Maven座標唯一標識一個依賴構件,它包含以下元素:
1)groupId:定義該Maven項目隸屬的實際項目 *
2)artifactId:定義實際項目中的一個Maven項目(模塊) *
3)version:定義Maven項目當前所屬的版本 *
4)packaging:項目打包方式,包括:jar、war、pom等(可選,默認爲jar)
5)classifier:幫助定義構建輸出的一些附屬構件,如該項目會通過使用一些插件生成如:javadoc.jar和java-sources.jar,它倆就是這兩個附屬構件的classifier,(不能直接定義,因爲由附屬插件生成)
2、propertyies: 定義一些屬性供下面引用
例如:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- spring版本號 -->
<spring.version>4.2.1.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependencies/>
3、dependency
1)groupId
2)artifactId
3)version
4)type:依賴的類型,對應於項目座標定義的packaging(默認爲Jar)
5)scope:依賴的範圍
6)opetional:標記依賴是否可選
7)exclusions:用來排除傳遞性依賴
4、依賴範圍:用來控制依賴與三種classpath的關係(編繹、測試、運行)
1)compile:編繹依賴範圍,默認,三種classpath都有效,例如spring-core
2)test:測試依賴範圍,只在測試classpath有效,例如junit
3)provided:已提供依賴範圍,只在編繹和測試classpath有
效,例如servlet-api,因爲運行時容器會提供
4)runtime:運行時依賴範圍,只在測試和運行classpath有效,
例如jdbc驅動,因爲編繹時只需要jdk的jdbc接口,在測
試和運行時才真正需要驅動
5)system:系統依賴範圍,和provided一樣,需要通過
systemPath元素顯示地指定依賴位置,可以引用環境變
量,但是不推薦使用(往往與本地依賴綁定,移植性不好)
6)import:導入依賴範圍,該依賴不會對三種classpath產生實
際的影響,通常和dependencyManagement結合使用
5、傳遞性依賴與傳遞性依賴範圍:
定義:如果A項目依賴於B依賴,而B依賴又依賴於C依賴,那麼當你在項目
A中導入B依賴時,maven會自動將C依賴導入
第一直接依賴的範圍和第二直接依賴的範圍決定了傳遞依賴的範圍
如下圖:最左邊一行表示第一直接依賴範圍,最上面一行表示第二直
接依賴範圍,中間交叉部分表示傳遞依賴範圍
![傳遞依賴](https://img-blog.csdn.net/20150918173626753)
6、依賴調解:當項目A有多個依賴路徑時,原則是路徑最近者優先,當
路徑相等的情況下“第一聲明者優先”
7、可選依賴:項目A依賴於項目B,項目B依賴於項目C和D,那麼C和D
B對於C和D的依賴都是可選依賴,都不會傳遞給A,原因:C和D可能是互
斥的