1. 程式人生 > >Maven依賴管理之BOM

Maven依賴管理之BOM

[TOC] ### 什麼是BOM BOM全稱是Bill Of Materials,譯作材料清單。BOM本身並不是一種特殊的檔案格式,而是一個普通的POM檔案,只是在這個POM中,我們羅列的是一個工程的所有依賴和其對應的版本。該檔案一般被其它工程使用,當其它工程引用BOM中羅列的jar包時,不用顯示指定具體的版本,會自動使用BOM對應的jar版本。 所以BOM的好處是用來管理一個工程的所有依賴版本資訊。 ### 一個BOM的格式 ``` 4.0.0 com.niceshot test-BOM 0.0.1-SNAPSHOT pom Test-BOM parent pom test a 1.2 test b 1.0 compile test
c 1.0 compile
``` 其中定義的關鍵資訊是 - `pom`打包方式是pom檔案 - ``下定義的各種依賴的版本 ### 怎麼使用BOM #### 通過parent引用 比如我有一個spring boot工程名叫`spring-cloud-learn`。由於其本身是一個spring boot工程,所以我可以直接引用Spring boot的BOM,通過``配置,即可 ``` 4.0.0 org.springframework.boot
spring-boot-starter-parent 2.3.4.RELEASE
com.niceshot spring-cloud-learn 0.0.1-SNAPSHOT spring-cloud-learn Demo project for Spring Boot ``` #### 通過dependencyManagement引用 parent只能指定一個BOM。如果我還想引入一個或多個BOM,這個時候,就可以使用``配置。也即`` 不光可以用來定義BOM本身的依賴清單,也可以用作BOM的引入。因為dependencyManagement本身是做依賴管理的,Jar是一種依賴,BOM當然也是一種依賴 ![](https://img2020.cnblogs.com/blog/2007268/202009/2007268-20200928234252655-2111778534.png) ### 怎麼檢視依賴的某個BOM的具體清單 由於BOM不是一個jar包,所以你沒辦法在idea的依賴libary中看看到該檔案 ![](https://img2020.cnblogs.com/blog/2007268/202009/2007268-20200928234306131-1806089199.png) 在idea中的檢視方式是通過ctrl + 滑鼠點選BOM的artifactId即可看到對應的材料清單 ![](https://img2020.cnblogs.com/blog/2007268/202009/2007268-20200928234319144-731920621.png) ### 版本衝突時的一些規則 當出現版本衝突時,具體使用哪一個版本的優先順序是 - 直接在當前工程中顯示指定的版本 - parent中配置的父工程使用的版本 - 在當前工程中通過dependencyManagement引入的BOM清單中的版本,當引入的多個BOM都有對應jar包時,先引入的BOM生效 - 上述三個地方都沒配置,則啟用依賴調解dependency mediation #### 何為依賴調節 當有兩個依賴路徑,依賴到同一個jar的不同版本時,最短路徑的版本生效,比如`A -> B -> C -> D 1.4 and A -> E -> D 1.0`最終將會使用D的1.0版本 ### 參考資料 https://www.baeldung.com/spring-maven-bom https://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/ https://stackoverflow.com/questions/38496022/maven-bom-bill-of-materials-de