首页 > 其他分享 >Maven依赖管理之BOM

Maven依赖管理之BOM

时间:2024-10-19 21:53:08浏览次数:7  
标签:依赖 parent spring jar Maven BOM 版本

Maven依赖管理之BOMMaven依赖管理之BOM

目录

什么是BOM#

BOM全称是Bill Of Materials,译作材料清单。BOM本身并不是一种特殊的文件格式,而是一个普通的POM文件,只是在这个POM中,我们罗列的是一个工程的所有依赖和其对应的版本。该文件一般被其它工程使用,当其它工程引用BOM中罗列的jar包时,不用显示指定具体的版本,会自动使用BOM对应的jar版本。

所以BOM的好处是用来管理一个工程的所有依赖版本信息。

一个BOM的格式#

<modelVersion>4.0.0</modelVersion>
    <groupId>com.niceshot</groupId>
    <artifactId>test-BOM</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Test-BOM</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>下定义的各种依赖的版本

怎么使用BOM#

通过parent引用#

比如我有一个spring boot工程名叫spring-cloud-learn。由于其本身是一个spring boot工程,所以我可以直接引用Spring boot的BOM,通过<parent>配置,即可

<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.niceshot</groupId>
    <artifactId>spring-cloud-learn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-learn</name>
    <description>Demo project for Spring Boot</description>

 

通过dependencyManagement引用#

parent只能指定一个BOM。如果我还想引入一个或多个BOM,这个时候,就可以使用<dependencyManagement>配置。也即<dependencyManagement> 不光可以用来定义BOM本身的依赖清单,也可以用作BOM的引入。因为dependencyManagement本身是做依赖管理的,Jar是一种依赖,BOM当然也是一种依赖

怎么查看依赖的某个BOM的具体清单#

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

在idea中的查看方式是通过ctrl + 鼠标点击BOM的artifactId即可看到对应的材料清单

版本冲突时的一些规则#

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

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

当有两个依赖路径,依赖到同一个jar的不同版本时,最短路径的版本生效,比如A -> B -> C -> D 1.4 and A -> E -> D 1.0最终将会使用D的1.0版本

标签:依赖,parent,spring,jar,Maven,BOM,版本
From: https://blog.csdn.net/g470641382/article/details/143081094

相关文章

  • webstorm前端vue项目安装依赖包总结
    npminstall提示错误信息,与node.js版本有关。以下是用到的一些命令行参数:1、清除npm的缓存:npmcacheclean--force2、设置npm下载镜像:npmconfigsetregistryhttps://registry.npmmirror.com如果下载过程中部分包提示联网访问失败404,可以修改package-lock.json文件地址到镜......
  • Maven安装
    1.Maven官网下载压缩包下载压缩包,同时需要注意自己的Java版本号是否符合对应maven的JDK版本要求(可以通过java-version查看自己的Java版本)Maven压缩包下载2.配置环境变量添加用户变量:我的文件路径如下:则添加如下环境变量:配置系统变量在Path中添加一条%MAVEN_HOME%/......
  • 【Spring篇】初识之Spring的入门程序及控制反转与依赖注入
         ......
  • 在vscode上配置maven,打jar包
    1.在Hadoop中安装配置maven环境mvn-v查看是否配置成功2.下载ssh拓展,建立远程连接3.安装了核Maven有关的6个插件在已经安装好SingleNode工作模式的Hadoop节点上,要在CODE上构建Java编程环境,需要安装ExtensionPackForJava插件包,主要安装了核Maven有关的6个插件:点在“S......
  • Maven与Gradle的区别
    Maven与Gradle是两种流行的构建工具,广泛用于Java项目的管理和构建。以下是它们的对比,包括官网、Windows11配置环境、在IDEA中的相同点和不同点,以及它们各自的优缺点。官网Maven官网: https://maven.apache.orgGradle官网: https://gradle.org一、Windows配置环境1.Maven......
  • Hive为什么依赖Mysql
    Hive之所以需要MySQL依赖,主要是因为Hive使用MySQL(或其他关系型数据库)来存储其元数据。以下是详细的解释:元数据存储Hive在执行查询和存储数据时,需要维护表的结构、列的数据类型、表之间的关系、分区信息等元数据。这些元数据通常存储在一个称为Metastore的地方。为了......
  • idea修改maven配置
    <?xmlversion="1.0"encoding="UTF-8"?><!--LicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements.SeetheNOTICEfiledistributedwiththisworkforadditionalinformationregardi......
  • WPF入门_02依赖属性
    1、依赖属性主要有以下三个优点1)依赖属性加入了属性变化通知、限制、验证等功能。这样可以使我们更方便地实现应用,同时大大减少了代码量2)节约内存:在WinForm中,每个UI控件的属性都赋予了初始值,这样每个相同的控件在内存中都会保存一份初始值。而WPF依赖属性很好地解决了这个问......
  • Junit单元测试—Maven
    JUnit单元测试常用注解测试顺序大概流程//第一步:创建测试类,测试类的类名一般是:被测试类类名+TestpublicclassMathUtilsTest{/*第二步:为了保证每个方法独立,为测试的每个方法单独创建测试方法测试方法要求(规格):(1)不能......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-2-环境准备与搭建-基于Maven(详细
    1.简介上一篇宏哥已经讲解和分享了如何通过引入jar包来搭建Java+Playwright自动化测试环境,这一种是比较老的方法,说白了就是过时的老古董,但是我们必须了解和知道,其实maven搭建无非也就是下载引入相关的jar包,只不过相比之下是简单方便了,了解其本质可以帮助我们更好的学习maven搭建......