Maven BOM 解析
# 前言
BOM(Bill of Materials)是由 Maven 提供的功能,它通过定义相互兼容的 jar 包版本集合,
使用时只需要依赖该 BOM 文件,即可放心的使用需要的依赖 jar 包,且无需再指定版本号。
BOM 的维护方负责版本升级,并保证 BOM 中定义的 jar 包版本之间的兼容性
使用 BOM 可以有效解决依赖冲突问题,同时子项目减轻标注版本号的负担
# 配置
BOM 本质上是普通的 POM 文件,区别是对于使用方而言,生效的只有 <dependencyManagement>
这部分,我们只需要在<dependencyManagement>
定义对外发布的客户端版本即可
下面我以 yudao 代码为例,创建 yudao-dependencies
模块,然后模块中只创建文件 pom.xml
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-dependencies</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<!-- 统一依赖管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
spring-boot-dependencies
依赖包里面声明了各种版本号,供其他项目(模块)去引用
除此之外,也可以像里面的 knife4j
单独配置依赖版本
# 使用
然后回到父项目 pom.xml
,我们需要向节点 dependencyManagement
中添加我们刚刚 BOM 模块信息
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-dependencies</artifactId>
<version>${revision}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
之后其他子项目即可使用 BOM 中配置的依赖
# 补充
我们以 yudao 为例,本质上还是个单体项目,其实直接在根目录 pom.xml
(opens new window) (opens new window) 管理依赖版本会更加方便,也符合绝大多数程序员的认知
那么为什么还要额外配置 BOM 模块呢,我们额外考虑场景,如果每个 yudao-module-xxx
模块都维护在一个独立的 Git 仓库,那么 yudao-dependencies
就可以在多个 yudao-module-xxx
模块实现复用。比较方便
# 参考链接
编辑 (opens new window)
上次更新: 2023/11/28, 12:55:10