项目中使用之Maven BOM

在这里插入图片描述

✅作者简介:大家好,我是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的目的

  1. 集中依赖版本管理:在多模块项目中,或者在需要共享相同依赖集的不同项目之间,BOM 允许统一管理依赖的版本,这样你可以确保所有项目或子模块使用的都是相同版本的依赖库。
  2. 简化依赖定义:项目可以通过引用 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当然也是一种依赖

image-20231206222204858

5.2 使用

那么如何在其他模块中使用呢,非常简单,因为我们父依赖中引入了并管理了依赖版本。

我们子模块可以直接引用依赖即可,就不需要再引入版本了。

image-20231206222608187

5.3 怎么查看依赖的BOM的具体清单

由于BOM不是一个jar包,所以你没办法在idea的依赖libary中看看到该文件

image-20231206222244058

6.版本冲突的一些规则

当出现版本冲突时,具体使用哪一个版本的优先顺序是

  • 直接在当前工程中显示指定的版本
  • parent中配置的父工程使用的版本
  • 在当前工程中通过dependencyManagement引入的BOM清单中的版本,当引入的多个BOM都有对应jar包时,先引入的BOM生效
  • 上述三个地方都没配置,则启用依赖调解dependency mediation

7.总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

公众号封面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件部分知识

目录 认识inode 如何理解创建一个空文件&#xff1f; 如何理解对文件写入信息&#xff1f; 如何理解删除一个文件&#xff1f; 为什么拷贝文件的时候很慢&#xff0c;而删除文件的时候很快&#xff1f; 如何理解目录 ​编辑 文件的三个时间 ​编辑 Access&#xff1a; …

Linux系统调试课:网络性能工具总结

文章目录 一、网络性能指标二、netstat三、route四、iptables沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章一起了解下网络性能工具。 一、网络性能指标 从网络性能指标出发,你更容易把性能工具同系统工作原理关联起来,对性能问题有宏观的认识和把握。这样,…

【LeetCode刷题-链表】--92.反转链表II

92.反转链表II /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ cla…

前端JavaScript入门-day08-正则表达式

目录 介绍 语法 元字符 边界符 量词 字符类&#xff1a; 修饰符 介绍 正则表达式&#xff08;Regular Expression&#xff09;是用于匹配字符串中字符组合的模式。在 JavaScript中&#xff0c;正则表达式也是对象&#xff0c;通常用来查找、替换那些符合正则表达式的…

书-用数组存储高于60低于70的人单独存起来

#include<stdio.h> # define N 10 //书-用数组存储高于60低于70的人单独存起来 int main(){float s[N]{68.2,62.3,63.4,34.5,45.6,56.7,67.8,78.9,89.0,100};int i;float diyu[100];int j0;for(i0;i<N;i){if(s[i]>60 && s[i]<70)diyu[j]s[i];//这里的范…

【数据结构】——二叉树特点

前言&#xff1a;我们前面已经了解了二叉树的一些概念&#xff0c;那么我们今天就来了解下二叉树的遍历实现和一些性质。 二叉树的遍历方式有三种&#xff1a;前序&#xff0c;中序&#xff0c;后序。 前序&#xff1a;先根节点&#xff0c;再左子树&#xff0c;最后右子树。 中…

绘制6层及以上PCB板,需要明白PCB板的结构和叠层

PCB主要由PP半固化片和core芯板压合而成&#xff0c;其中core芯板两面都有铜箔&#xff0c;是PCB板的导电介质&#xff1b;PP半固化片是绝缘材料&#xff0c;用于芯板的粘合。 在PP半固化片被层压后&#xff0c;其环氧树脂被挤压开来&#xff0c;将core芯板粘合在一起。 PCB的叠…

Python代码将txt里面多行json字符串转成excel文件

python 代码 将txt里面的多行json字符串转成excel history.txt文件json代码样例 Json转换Excel代码 import json import pandas as pddef json_out(file_path,excel_path):all_list[]with open(file_path, "r", encodingutf-8) as f:for line in f:all_list.append…

Tuxera NTFS2024安装包下载教程

在听到小凡的电话说“Tuxera NTFS for Mac软件安装失败&#xff0c;怎么办”的时候&#xff0c;小编心里真像有一万头草泥马在奔腾——苹果软件还能安装失败&#xff01;&#xff1f; 挥手把一万头草泥马赶走&#xff0c;脑补着苹果软件的安装&#xff0c;小编对着电话吼道&am…

配置主机与外网时间服务器同步时间

目录 NTP服务简介 时间管理命令 第一步&#xff1a;更改当前主机所在地的时间 方法一&#xff1a;使用tzselect命令查询需要的时区 1、使用tzselect命令查询需要的时区 2、添加变量到 ~/.bash_profile 文件中&#xff0c;即追加类似的内容&#xff1a; 3、重新连接一个…

LLM大语言模型(一):ChatGLM3-6B本地部署

目录 前言 本机环境 ChatGLM3代码库下载 模型文件下载 修改为从本地模型文件启动 启动模型网页版对话demo 超参数设置 GPU资源使用情况 &#xff08;网页对话非常流畅&#xff09; 前言 LLM大语言模型工程化&#xff0c;在本地搭建一套开源的LLM&#xff0c;方便后续的…

深入了解UUID:生成、应用与优势

一、引言 在当今数字化时代&#xff0c;唯一标识一个对象的能力变得越来越重要。UUID&#xff08;Universally Unique Identifier&#xff0c;通用唯一标识符&#xff09;应运而生&#xff0c;作为一种保证全球唯一性的标识方法&#xff0c;广泛应用于各种场景。本文将详细介绍…

HTML程序大全(2):通用注册模版

一、正常情况效果 二、某项没有填写的效果 三、没有勾选同意项的效果 四、代码 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>注册</title><style>body {font-family: Arial, sans-serif;background-color…

21章网络通信

21.1——网络程序设计基础 网络程序设计编写得到是与其他计算机进行通信的程序 21.1.1——局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机 21.1.2——网络协议 网络协议规定了计算机之间连接的物理、机械 (网线与网卡的连接规定)、…

「智慧城市」这一概念科学吗?还是炒作?

智慧城市是一个综合性的概念&#xff0c;它利用信息技术和创新概念&#xff0c;将城市的各个系统和服务集成起来&#xff0c;以提升城市运行效率、优化城市管理和服务&#xff0c;改善市民的生活质量。 具体来说&#xff0c;智慧城市涵盖了许多领域&#xff0c;包括城市规划、建…

通过仿真理解信道化接收机分析过程

概要 信道化从子信道带宽划分上可分为临界抽取和非临界抽取两种&#xff0c;从各子信道中心频率布局上可分为偶型排列和奇型排列&#xff0c;从处理流程上可分为信道化分析与信道化综合过程。本文主要通过仿真来理解偶型排列/临界抽取/信道化分析过程。 基本原理 常规的数字…

ESP32网络开发实例-发送邮件

发送邮件 文章目录 发送邮件1、邮件发送配置2、软件准备3、硬件准备4、代码实现本文将详细介绍在ESP32中如何使用SMTP协议发送邮件。 1、邮件发送配置 在本次实例中,我们将通过QQ邮箱向指定邮件地址发送邮件。 第一步,注册QQ邮箱 第二步,开启QQ邮箱SMTP/IMAP 服务: 生成…

6.1810: Operating System Engineering 2023 <Lab4 traps: Traps>

一、本节任务 二、要点&#xff08;Traps and system calls&#xff09; 有三种事件会使 CPU 暂停当前的指令执行&#xff0c;并强制将控制转移到处理该事件的特殊代码中&#xff1a; 系统调用&#xff08;ecall&#xff09;&#xff1b;异常&#xff08;如非法指令&#xff…

重磅!苹果官方发布大模型框架:一个可以充分利用苹果统一内存的新的大模型框架MLX,你的MacBook可以一键运行LLaMA了

本文来自DataLearnerAI官方网站&#xff1a;重磅&#xff01;苹果官方发布大模型框架&#xff1a;一个可以充分利用苹果统一内存的新的大模型框架MLX&#xff0c;你的MacBook可以一键运行LLaMA了 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/105170187…

Java 输入输出流03

8. 字符流 Writer/Reader Java 中字符是采用 Unicode 标准&#xff0c;一个字符是 16 位&#xff0c;即一个字符使用两个字节来表示。为此&#xff0c;JAVA 中引入了处理字符的流。 1&#xff09;Reader抽象类 用于读取字符流的抽象类。子类必须实现的方法只有 read (char [],…