1 . 座標java
maven 的全部構件均經過座標進行組織和管理。maven 的座標經過 5 個元素進行定義,其中 groupId、artifactId、version 是必須的,packaging 是可選的(默認爲jar),classifier 是不能直接定義的。spring
2 . 依賴api
使用 Maven 能夠方便的管理依賴,以下是一段在 pom.xml 文件中聲明依賴的代碼示例:tomcat
1 <dependencies> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-test</artifactId> 5 <version>3.2.0.RELEASE</version> 6 <type>jar</type> 7 <scope>test</scope> 8 <systemPath>${java.home}/lib/rt.jar</systemPath> 9 <optional>false</optional> 10 <exclusions> 11 <exclusion></exclusion> 12 </exclusions> 13 </dependency> 14 </dependencies>
2 . 1 . 依賴範圍maven
執行不一樣的 Maven 命令(mvn package,mvn test,mvn install ……),會使用不一樣的 classpath,Maven 對應的有三套 classpath:編譯classpath、測試classpath,運行classpath。scope 選項的值,決定了該依賴構件會被引入到哪個 classpath 中。ide
2 . 2 . 依賴傳遞post
如上圖所示,hibernate-core 依賴 hibernate-commons-annotations ,而 hibernate-commons-annotations 又依賴 slf4j-api ,hibernate-core 對 slf4j-api 的依賴就是傳遞依賴。咱們只須要引入 hibernate-core 構件的依賴,不用考慮它還有其它的依賴, 也不用擔憂會引入多餘或衝突的依賴,Maven 會自動爲咱們引入依賴及傳遞依賴。測試
2 . 3 . 依賴傳遞和依賴範圍spa
如上圖 2.2 所示,幾種依賴關係分別叫作第一直接依賴、第二直接依賴和傳遞性依賴,其中第一直接依賴和第二直接依賴的依賴範圍,決定了傳遞性依賴的依賴範圍。hibernate
2 . 4 . 依賴衝突
一般咱們不須要關心傳遞性依賴,當多個傳遞性依賴中有對同一構件不一樣版本的依賴時,如何解決呢?
2 . 5 . 依賴排除
針對依賴衝突中的「短路徑優先」,若是咱們想使用長路徑的依賴怎麼辦呢?這時可使用依賴排除 <exclusions> 元素,顯示排除短路徑依賴。在非衝突的狀況下,這種方法一樣有效。
2 . 6 . 依賴歸類
一般在項目中,咱們會同時依賴同一個構件的不一樣模塊,如 spring-orm-3.2.0,spring-context-3.2.0,且多個模塊版本相同,爲了維護和升級方便,咱們能夠對其同一管理,這時可使用到 Maven 屬性,相似於變量的概念。
1 <properties> 2 <springframework.version>3.2.0.RELEASE</springframework.version> 3 </properties> 4 5 <dependencies> 6 <dependency> 7 <groupId>org.springframework</groupId> 8 <artifactId>spring-orm</artifactId> 9 <version>${springframework.version}</version> 10 </dependency> 11 <dependency> 12 <groupId>org.springframework</groupId> 13 <artifactId>spring-context</artifactId> 14 <version>${springframework.version}</version> 15 </dependency> 16 </dependencies>