1. 程式人生 > >[讀書筆記]Maven主要概念:依賴

[讀書筆記]Maven主要概念:依賴

Maven通過依賴(dependency)來管理專案的依賴Jar包。一個典型的依賴如下:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
dependency包含groupId,artifactId,version,scope,type,optional,excusions元素,前四個元素比較容易理解。其它幾個要素:
  • scope是為了對應構建時的三個classpath(編譯,測試,執行)設定的。可選值包括:
    • test:表示只對測試程式碼有效,在主程式碼中引用該Jar會報錯
    • compile:預設值:
    • provided:編譯和測試時需要,執行時不需要
    • runtime:測試和執行有效,編譯主程式碼時不需要,如JDBC驅動
    • system:範圍和provided完全一致,不常用
    • import:使用Maven的繼承機制時使用,不常用
  • optional:可選依賴。如某個專案實現了資料庫操作,可以依賴mysql也可以依賴oracle,對mysql和oracle的jar包就可以配置為可選依賴。其它專案如果引用了該專案的jar包,將不自動載入可選依賴的jar包。
  • excusions:排除傳遞性依賴

依賴的重要概念:傳遞性依賴,直接依賴,間接依賴

專案中引入了Spring依賴(Spring稱為專案的直接依賴),Spring又依賴了於其它專案(該專案稱為該專案的間接依賴),在專案中只需要指定對Spring的依賴即可,Maven會根據Spring的POM自動載入間接依賴。

傳遞性依賴需要明確的問題

可選依賴:如果某個間接依賴為可選的,不會載入它。

專案對某給專案既是直接依賴,也有間接依賴,為了防止混亂,可以關閉某個間接依賴( 通過dependency. excusions設定),然後在專案中宣告對它的直接依賴。

依賴調節

有不同的兩個直接依賴有相同的間接依賴,但版本不同時如何選擇版本號:

  1. 依賴路徑短的優先
  2. 依賴路徑相同的情況下先宣告的優先

檢視專案依賴的幾個有用命令

  • mvn dependency:list

檢視專案的已解析依賴

  • mvn dependency:tree

檢視專案的依賴樹(直接依賴,間接依賴)

  • mvn dependency:analyze

顯示專案依賴存在的問題:

    • Used undeclared dependencies(用到但沒定義為顯示依賴的專案):專案中直接用到了該依賴,但使用間接依賴來引入Jar包。可能存在版本不一致的風險。
    • Unused declared dependencies(沒用到但定義為顯示依賴的專案):程式碼中雖然沒有顯示地宣告會用到該Jar包(如通過import地方式),但測試或執行時會用到如mysql驅動包,所以該報告需要謹慎分析。