项目中使用之Maven BOM

项目中使用之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的简单格式

xml 复制代码
<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的目的

  1. 集中依赖版本管理:在多模块项目中,或者在需要共享相同依赖集的不同项目之间,BOM 允许统一管理依赖的版本,这样你可以确保所有项目或子模块使用的都是相同版本的依赖库。
  2. 简化依赖定义:项目可以通过引用 BOM 来避免在每个项目的 POM 文件中重复定义依赖版本,减少重复并使依赖管理变得更加清晰。

5.如何使用BOM

当你想在你的项目中使用 BOM 时,你可以在项目的 POM 文件里像下面这样声明它:

xml 复制代码
<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,后面文章会首先同步至公众号。

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
皮皮林55115 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_4569042715 小时前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_15 小时前
异步编程CompletionService
java
DKPT15 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
sibylyue15 小时前
Guava中常用的工具类
java·guava
奔跑吧邓邓子15 小时前
【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战
java·spring boot·实战·web开发·接口设计
专注API从业者15 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
奔跑吧邓邓子16 小时前
【Java实战㉝】Spring Boot实战:从入门到自动配置的进阶之路
java·spring boot·实战·自动配置
ONLYOFFICE16 小时前
【技术教程】如何将ONLYOFFICE文档集成到使用Spring Boot框架编写的Java Web应用程序中
java·spring boot·编辑器
叫我阿柒啊16 小时前
Java全栈开发工程师的实战面试经历:从基础到微服务
java·微服务·typescript·vue·springboot·前端开发·后端开发