✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 工具教程
✨特色专栏: MySQL学习
🥭本文内容:项目中使用之Maven BOM
📚个人知识库 :知识库,欢迎大家访问
1.什么是BOM
在 Maven 中,BOM 是“Bill Of Materials”(物料清单)的缩写。它是 Maven 项目管理中使用的一种特殊类型的 POM(Project Object Model)文件,通常用来提供一组有共同版本管理的依赖列表。
BOM全称是Bill Of Materials
,译作材料清单。BOM本身并不是一种特殊的文件格式,而是一个普通的POM文件,只是在这个POM中,我们罗列的是一个工程的所有依赖和其对应的版本。该文件一般被其它工程使用,当其它工程引用BOM中罗列的jar包时,不用显示指定具体的版本,会自动使用BOM对应的jar版本。
所以BOM的好处是用来管理一个工程的所有依赖版本信息。
2.BOM的简单格式
<modelVersion>4.0.0</modelVersion>
<groupId>org.javatop</groupId>
<artifactId>BOMtest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>BOMtest</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>
其中定义的关键信息是
<packaging>pom</packaging>
打包方式是pom文件<dependencyManagement><dependencies>
下定义的各种依赖的版本
3.BOM的好处
- 减少了版本冲突的风险,特别是当你使用许多相互依赖的库时。
- 简化了项目依赖的升级过程,只需在 BOM 文件中更新依赖版本,所有引用该 BOM 的项目都会使用新版本。
- 在企业环境中,BOM 可以提供一个企业级标准的依赖版本集合。
4.BOM的目的
- 集中依赖版本管理:在多模块项目中,或者在需要共享相同依赖集的不同项目之间,BOM 允许统一管理依赖的版本,这样你可以确保所有项目或子模块使用的都是相同版本的依赖库。
- 简化依赖定义:项目可以通过引用 BOM 来避免在每个项目的 POM 文件中重复定义依赖版本,减少重复并使依赖管理变得更加清晰。
5.如何使用BOM
当你想在你的项目中使用 BOM 时,你可以在项目的 POM 文件里像下面这样声明它:
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<!-- ... other settings ... -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>my-bom</artifactId>
<version>1.0.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
</project>
5.1 通过dependencyManagement
parent只能指定一个BOM。如果我还想引入一个或多个BOM,这个时候,就可以使用<dependencyManagement>
配置。也即<dependencyManagement>
不光可以用来定义BOM本身的依赖清单,也可以用作BOM的引入。因为dependencyManagement本身是做依赖管理的,Jar是一种依赖,BOM当然也是一种依赖
5.2 使用
那么如何在其他模块中使用呢,非常简单,因为我们父依赖中引入了并管理了依赖版本。
我们子模块可以直接引用依赖即可,就不需要再引入版本了。
5.3 怎么查看依赖的BOM的具体清单
由于BOM不是一个jar包,所以你没办法在idea的依赖libary中看看到该文件
6.版本冲突的一些规则
当出现版本冲突时,具体使用哪一个版本的优先顺序是
- 直接在当前工程中显示指定的版本
- parent中配置的父工程使用的版本
- 在当前工程中通过dependencyManagement引入的BOM清单中的版本,当引入的多个BOM都有对应jar包时,先引入的BOM生效
- 上述三个地方都没配置,则启用依赖调解dependency mediation
7.总结
以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。
如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。