Maven依赖管理之BOM

目录
  • 什么是BOM
  • 一个BOM的格式
  • 怎么使用BOM
    • 通过parent引用
    • 通过dependencyManagement引用
  • 怎么查看依赖的某个BOM的具体清单
  • 版本冲突时的一些规则
    • 何为依赖调节
  • 参考资料

什么是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当然也是一种依赖

Maven依赖管理之BOM_第1张图片

怎么查看依赖的某个BOM的具体清单

由于BOM不是一个jar包,所以你没办法在idea的依赖libary中看看到该文件
Maven依赖管理之BOM_第2张图片

在idea中的查看方式是通过ctrl + 鼠标点击BOM的artifactId即可看到对应的材料清单
Maven依赖管理之BOM_第3张图片

版本冲突时的一些规则

当出现版本冲突时,具体使用哪一个版本的优先顺序是

  • 直接在当前工程中显示指定的版本
  • 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-dependency

你可能感兴趣的:(Maven依赖管理之BOM)