项目中使用之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 发布!

相关推荐
【D'accumulation】8 分钟前
典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
java·设计模式·mvc
试行22 分钟前
Android实现自定义下拉列表绑定数据
android·java
茜茜西西CeCe28 分钟前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发
救救孩子把33 分钟前
Java基础之IO流
java·开发语言
小菜yh34 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
宇卿.41 分钟前
Java键盘输入语句
java·开发语言
浅念同学41 分钟前
算法.图论-并查集上
java·算法·图论
立志成为coding大牛的菜鸟.1 小时前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞1 小时前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring