[讀書筆記]Maven主要概念:依賴
阿新 • • 發佈:2019-01-27
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設定),然後在專案中宣告對它的直接依賴。
依賴調節
有不同的兩個直接依賴有相同的間接依賴,但版本不同時如何選擇版本號:
- 依賴路徑短的優先
- 依賴路徑相同的情況下先宣告的優先
檢視專案依賴的幾個有用命令
- mvn dependency:list
檢視專案的已解析依賴
- mvn dependency:tree
檢視專案的依賴樹(直接依賴,間接依賴)
- mvn dependency:analyze
顯示專案依賴存在的問題:
- Used undeclared dependencies(用到但沒定義為顯示依賴的專案):專案中直接用到了該依賴,但使用間接依賴來引入Jar包。可能存在版本不一致的風險。
- Unused declared dependencies(沒用到但定義為顯示依賴的專案):程式碼中雖然沒有顯示地宣告會用到該Jar包(如通過import地方式),但測試或執行時會用到如mysql驅動包,所以該報告需要謹慎分析。