BOM全称是Bill Of Materials,译做材料清单。BOM自己并非一种特殊的文件格式,而是一个普通的POM文件,只是在这个POM中,咱们罗列的是一个工程的全部依赖和其对应的版本。该文件通常被其它工程使用,当其它工程引用BOM中罗列的jar包时,不用显示指定具体的版本,会自动使用BOM对应的jar版本。java
因此BOM的好处是用来管理一个工程的全部依赖版本信息。spring
<modelVersion>4.0.0</modelVersion> <groupId>com.niceshot</groupId> <artifactId>test-BOM</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>Test-BOM</name> <description>parent pom</description> <dependencyManagement> <dependencies> <dependency> <groupId>test</groupId> <artifactId>a</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>test</groupId> <artifactId>b</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>test</groupId> <artifactId>c</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> </dependencies> </dependencyManagement>
其中定义的关键信息是maven
<packaging>pom</packaging>
打包方式是pom文件<dependencyManagement><dependencies>
下定义的各类依赖的版本好比我有一个spring boot工程名叫spring-cloud-learn
。因为其自己是一个spring boot工程,因此我能够直接引用Spring boot的BOM,经过<parent>
配置,便可ide
<modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.niceshot</groupId> <artifactId>spring-cloud-learn</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-learn</name> <description>Demo project for Spring Boot</description>
parent只能指定一个BOM。若是我还想引入一个或多个BOM,这个时候,就可使用<dependencyManagement>
配置。也即<dependencyManagement>
不光能够用来定义BOM自己的依赖清单,也能够用做BOM的引入。由于dependencyManagement自己是作依赖管理的,Jar是一种依赖,BOM固然也是一种依赖spring-boot
因为BOM不是一个jar包,因此你没办法在idea的依赖libary中看看到该文件
idea
在idea中的查看方式是经过ctrl + 鼠标点击BOM的artifactId便可看到对应的材料清单
code
当出现版本冲突时,具体使用哪个版本的优先顺序是blog
当有两个依赖路径,依赖到同一个jar的不一样版本时,最短路径的版本生效,好比A -> B -> C -> D 1.4 and A -> E -> D 1.0
最终将会使用D的1.0版本ip
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-dependencyci