1. 程式人生 > >Maven學習筆記四(坐標和依賴)

Maven學習筆記四(坐標和依賴)

Maven學習筆記

坐標

什麽是坐標? 在平面幾何中坐標(x,y)可以標識平面中唯一的一點


Maven 坐標主要組成

groupId:定義當前 Maven 項目隸屬項目、組織

artifactId:定義實際項目中的一個模塊

version:定義當前項目的當前版本

packaging:定義該項目的打包方式(pom/jar/war,默認為 jar)

groupId、artifactId、version 簡稱為 GAV。


Maven 為什麽使用坐標?

Maven 世界擁有大量構件,需要找一個用來唯一標識一個構建的統一規範 擁有了統一規範,就可以把查找工作交給機器


如何獲取坐標 http://mvnrepository.com/ 網站上可以搜索具體的組織或項目關鍵字,之後復制 對應的坐標到 pom.xml 中。如:

技術分享圖片


依賴

技術分享圖片

依賴範圍 scope 用來控制依賴和編譯,測試,運行的 classpath 的關系。具 體的依賴範圍有如下 6 種:

1) compile: 編譯域,這個是 Maven 中 scope 的默認值,我們平時不寫 scpoe 配置時默認就是使用這個值。compile 表示被依賴項目需要同當前項目編譯 時一起進行編譯,項目測試期以及本項目運行時期同樣生效,打包的時候需 要包含進去。

2) test:測試域,表示被依賴的項目僅在項目進行測試的時候生效,一般將日 誌等依賴包(如:Junit)配置為 test,項目運行時不會生效。

3) provided:provided 意味著打包的時候可以不用打包進去,別的容器會提供, 如 Servlet-API,Tomcat 這些容器會提供,所以打包,運行時無需提供。

4) runtime:運行域,表示被依賴項目不會參與項目的編譯,但項目的測試期和 運行時期會參與。與 compile 相比,跳過了編譯這個環節。(如:JDBC 驅動)

5) system:系統範圍,自定義構件,指定 systemPath;跟 provided 相似,但是 在系統中要以外部 JAR 包的形式提供,maven 不會在 repository 查找它。

6) import:只使用在中,表示從其它的 pom 中導入 dependency 的配置。


添加依賴

技術分享圖片


依賴的傳遞

A(maven_web1)項目,B(maven_web2)項目 ,C(maven_test2)項目

首先A項目中添加依賴包,保存後項目中會自動導入包

技術分享圖片

技術分享圖片


然後A項目的包傳遞到B項目中,在B項目中依賴:

技術分享圖片

技術分享圖片

c項目中依賴B項目的包(因為B也依賴了A項目的包,因此C會依賴A,B項目的包):

技術分享圖片

技術分享圖片


說明:

技術分享圖片

可選依賴

在依賴節點 dependency 中的可以控制當前的依賴是否向下傳遞; 默認值為 false,表示向下傳遞。

設置log4j<optional>true</optional>

技術分享圖片

B項目中log4j包已經沒有中A中傳遞過來

技術分享圖片


排除依賴

在 pom 中的依賴節點中,如果引入的依賴包含了很多其它的傳遞依賴,而且 項目需要的這些依賴的版本和傳遞依賴的不相符;那麽可以在依賴節點中設置排 除依賴節點

B項目進行排除依賴,C項目也不接收A中傳遞給B的依賴

技術分享圖片

技術分享圖片 技術分享圖片


依賴沖突

1.不同依賴路徑的情況

如果依賴的路徑不相同的時候,以最短的路徑為準

比如項目A中咯log4j版本為1.2.14,我們在B中引入1.2.16,那麽項目C就會變成1.2.16,就近原則。

技術分享圖片

技術分享圖片


2.相同依賴路徑的情況

1)如果直接依賴中包含有同一個坐標不同版本的資源依賴,以配置順序下方的 版本為準

技術分享圖片

技術分享圖片


2)如果間接依賴中包含有同一個坐標不同版本的資源依賴,以配置順序上方的 版本為準

首先我們就導入spring-beans這個資源

技術分享圖片

技術分享圖片


然後2個資源依賴一起引用,spring-core版本變成了4.1.6

技術分享圖片




Maven學習筆記四(坐標和依賴)