# Maven Bom 的使用

news2024/7/2 20:45:06

Maven Bom 的使用

文章目录

  • Maven Bom 的使用
    • 概述
    • BOM特点
      • 优点
      • 缺点
    • Maven
      • Maven 安装
        • 安装步骤
        • settingx.ml常用仓库地址
        • Idea 使用maven常见坑
    • SpringBoot 项目Bom使用案例
      • 项目结构
      • 主项目 zerocode-back-serve
      • zc-dependency(第三方jar管理)
      • 子模块zc-serve
      • 子模块zc-database-model
    • 遇到的问题
      • 完整代码

概述

  • Maven BOM是一个概念,它用于管理项目依赖的版本。BOM 本身是一个特殊类型的 POM(Project Object Model)文件,它包含了一个或多个依赖项的版本信息,但不包含实际的依赖项。
  • Maven 项目中,通常会有多个依赖项,这些依赖项可能有不同的版本,而且它们之间可能还有依赖关系。为了避免版本冲突和手动管理每个依赖项的版本,可以使用 BOM 来统一管理这些依赖项的版本。
  • BOM 文件通常由框架或库的开发者提供,它包含了该框架或库所有依赖项的版本信息。在项目中使用 BOM 时,只需要在依赖项中声明需要使用的依赖项,而不需要声明版本号,Maven 会自动根据 BOM 文件中的版本信息来解析依赖项的版本

BOM特点

优点

  1. 版本管理:BOM 允许您在一个地方集中定义所有相关依赖库的版本号,确保项目中使用的所有库具有一致的版本。

  2. 简化依赖管理:通过使用 BOM,您可以简化项目的依赖管理,减少重复和混乱。

  3. 减少冲突:BOM 可以帮助减少依赖库之间的版本冲突,因为所有依赖都使用相同的版本。

缺点

  1. 限制灵活性:BOM 可能限制您在项目中使用不同版本的依赖库,因为所有依赖都将受到 BOM 中定义的版本的约束。
  2. 增加复杂性:在某些情况下,BOM 可能会增加项目的复杂性,特别是在处理特定依赖的特定版本时。
  3. 需要额外配置:为了使用 BOM,您需要在项目中配置相应的依赖和插件,这可能需要一些额外的工作。

Maven

Maven 安装

安装步骤
  • 下载maven配置环境变量,即可使用
settingx.ml常用仓库地址
  • 阿里云仓库

    <mirrors>
        <mirror>         
            <id>alimaven</id>
            <name>aliyun maven</name> 
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
            <mirrorOf>central</mirrorOf> 
        </mirror> 
    </mirrors>
    
Idea 使用maven常见坑
  • Idea右侧Profiles下面的每个maven项目报红,因为项目无法识别到当前的maven项目,右键unlink maven projects,点击加号重新添加项目。
  • 编译的时候如果class文件中已经存在了,但是Idea报找不到类并且报红,可以尝试上面的方法。或者清理Idea的缓存重启。
  • 当仓库中的jar包问题混乱时候,可以重新指定maven的地址,重新拉去jar包。
    在这里插入图片描述

SpringBoot 项目Bom使用案例

项目结构

  • 项目结构如图所示

在这里插入图片描述

主项目 zerocode-back-serve

  • 通过<modules>指定主模块下面的子模块,通过dependencyManagement引入所有的依赖管理器,在子模块中只需要写上需要用的依赖就可以

  • pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lidong.zc</groupId>
    <artifactId>zerocode-back-serve</artifactId>
    <packaging>pom</packaging>
    <version>${zerocode-back-serve-revision}</version>

    <!-- 模块 -->
    <modules>
        <module>zc-serve</module>
        <module>zc-database-model</module>
    </modules>

    <!-- 全局的版本指定 -->
    <properties>
        <!-- springboot 版本指定 -->
        <springboot-version>3.0.0</springboot-version>
        <!-- zc 后端服务的版本 -->
        <zerocode-back-serve-revision>0.0.1-SNAPSHOT</zerocode-back-serve-revision>
        <!-- zc dependency 的版本 -->
        <zc-dependency>0.0.1-SNAPSHOT</zc-dependency>
    </properties>

    <dependencyManagement>
        <dependencies>

            <!-- 依赖 zc-dependency -->
            <dependency>
                <groupId>com.lidong.zc</groupId>
                <artifactId>zc-dependency</artifactId>
                <version>${zc-dependency}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- springboot dependecy -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springboot-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

zc-dependency(第三方jar管理)

  • 所有第三方jar的版本在这个模块指定,其它模块只需要引入需要的依赖即可

  • pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lidong.zc</groupId>
    <artifactId>zc-dependency</artifactId>
    <name>zc-dependency</name>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <description>jar包统一管理</description>

    <properties>
        <java.version>1.8</java.version>
        <!-- 指定 jdk 版本-->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <mybatis.version>2.1.0</mybatis.version>
        <druid-version>1.2.11</druid-version>
    </properties>

    <dependencyManagement>
        <dependencies>

            <!-- mybatis 依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <!-- duruid 依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid-version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

子模块zc-serve

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.lidong.zc</groupId>
        <artifactId>zerocode-back-serve</artifactId>
        <version>${zerocode-back-serve-revision}</version>
    </parent>

    <artifactId>zc-serve</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zc-serve</name>
    <description>zc-serve</description>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>

    </dependencies>

</project>

子模块zc-database-model

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.lidong.zc</groupId>
        <artifactId>zerocode-back-serve</artifactId>
        <version>${zerocode-back-serve-revision}</version>
    </parent>

    <artifactId>zc-database-model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zc-database-model</name>
    <description>zc-database-model</description>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

    </dependencies>

</project>

遇到的问题

1、子模块中Parent模块的版本不一致报错: https://bbs.csdn.net/topics/618266039

完整代码

  • https://gitee.com/Marlon_Brando/zerocode-back-serve

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

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

相关文章

Qt creator构建DLL库

文章目录 一、构建DLL库二、隐式调用DLL库 一、构建DLL库 Qt creator创建DLL项目。 实现功能函数。 运行代码&#xff0c;debug目录下会有.dll和.lib文件。 二、隐式调用DLL库 QT新建控制台项目。将.lib文件和与之关联的头文件赋值到项目文件夹。 3. 添加头文件和外部依赖库…

目标检测——YOLOR算法解读

论文&#xff1a;YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks 作者&#xff1a;Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2105.04206 代码&#xff1a;https://github.com/WongKinYiu/yolo…

Python界面库Flet(1)介绍和快速使用

Python界面库Flet(1)快速上手使用 Author&#xff1a;Once Day Date&#xff1a;2024年3月19日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Pyt…

利用sealos安装k8s集群

1. 环境准备 准备三台干净&#xff08;未安装过k8s环境&#xff09;的虚拟机 # 所有的主机都要配置主机名和域名映射 # 设置主机名 hostnamectl set-hostname k8s-master01 # vim /etc/hosts 192.168.59.201 k8s-master01 192.168.59.202 k8s-worker01 192.168.59.203 k8…

飞鸟写作能用吗 #笔记#笔记

飞鸟写作是一个强大的论文写作工具&#xff0c;不仅可以帮助用户高效、准确地完成论文写作&#xff0c;还能帮助用户对论文进行查重和降重。那么&#xff0c;飞鸟写作能用吗&#xff1f;答案是肯定的&#xff0c;飞鸟写作非常好用&#xff01; 首先&#xff0c;飞鸟写作拥有强大…

视频记录历史播放位置效果

简介 每次打开页面视频从上一次的播放位置开始播放 利用lodash库做节流 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

MySQL | 视图

视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1. 基本使用 1.1. 创建视图 create view 视图名 as select语句&#xff1b; 创建测…

自动驾驶轨迹规划之时空语义走廊(一)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊 ​4.1 种子生成 4.2 具有语义边界的cube inflation ​4.3 立方体松弛 本文解析了丁文超老师…

JetBrains数据库驱动下载失败解决方法

本方法可通用于解决PyCharm等JetBrains家的IDE下载数据库驱动问题。 在Jet家IDE内连接数据库时&#xff0c;mysql、sqlite等的驱动有部分在 https://download.jetbrains.com 网站上&#xff0c;可能由于网络问题无法访问。 解决方法是修改 JetBrains 路径下的 jdbc.drivers.xm…

计算机基础系列 —— 从 Nand 门、DFF 到 RAM

Memory: The faculty of the brain by which data or information is encoded, stored, and retrieved when needed.It is the retention of information over time for the purpose of influencing future action —— Wikipedia 文中提到的所有实现都可以参考&#xff1a;nan…

Typecho如何去掉/隐藏index.php

Typecho后台设置永久链接后&#xff0c;会在域名后加上index.php&#xff0c;很多人都接受不了。例如如下网址&#xff1a;https://www.jichun29.cn/index.php/archives/37/&#xff0c;但我们希望最终的形式是这样&#xff1a;https://www.jichun29.cn/archives/37.html。那么…

【Oracle】Linux——Centos7安装Oracle12c

安装前拍快照、安装前拍快照、安装前拍快照 目录 安装前拍快照、安装前拍快照、安装前拍快照1.下载Oracle12C安装包2.基本环境搭建2.1创建用户和组2.2创建oralce安装目录,oracle用户分配目录权限2.3上传安装包 3.系统参数配置及服务器设置3.1依赖安装3.2内核参数配置3.3配置完成…

【项目自我反思之vue的组件通信】

为什么子组件不能通过props实时接收父组件修改后动态变化的值 一、现象二、可能的原因1.响应式系统的限制2.异步更新队列3.父组件和子组件的生命周期4.子组件内部对 props 的处理 三、组件通信的几种场景&#xff08;解决方案&#xff09;1.子组件想修改父组件的数据2.子组件传…

Keepalive与idle监测及性能优化

Keepalive 与 idle监测 Keepalive&#xff08;保活&#xff09;: Keepalive 是一种机制&#xff0c;通常用于TCP/IP网络。它的目的是确保连接双方都知道对方仍然存在并且连接是活动的。这是通过定期发送控制消息&#xff08;称为keepalive消息&#xff09;实现的。如果在预定时…

机器学习K-means算法

K-Means 算法&#xff08;K-Means算法、K-Means 中心值计算、K-Means 距离计算公式、K-Means 算法迭代步骤、K-Means算法实例&#xff09; 问题引入 给你如下两种图片&#xff0c;快读回答2个问题&#xff0c;问 图1 中有几类五谷杂粮&#xff1f;问 图2 中有几类五谷杂粮&…

深度分析鸿蒙应用开发的准确红利期、前景、未来发展方向

近年来&#xff0c;随着互联网技术的不断发展&#xff0c;鸿蒙生态开发逐渐成为热门话题。作为一种新兴的操作系统&#xff0c;其发展趋势备受关注。同时&#xff0c;鸿蒙生态开发的价值、就业岗位需求以及相关学习方面也引起了广泛关注。 那么就目前的形势来看&#xff0c;鸿…

6-191 拓扑排序

一项工程由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其他子任务后才能执行。例如,下图表示了一项工程若干子任务之间的先后关系。 编写函数输出所有子任务的拓扑序列。 函数接口定义: Status Push_SeqStack(SeqStack &s, ElemType x)//入栈,x入到…

镁光的sdram手册阅读--MT48LCC16M16A2

镁光的sdram手册阅读–MT48LCC16M16A2 一、这个sdram的总容量是256Mb&#xff0c;MT48LC16M16A2对应的参数是&#xff1a;4Meg 16 4banks&#xff0c;也可表示为16M16。4164256Mbit。 1&#xff09;其中&#xff0c;4Meg表示单个bank包含的存储单元个数&#xff0c;计算公式…

docker 数据卷 (二)

1&#xff0c;为什么使用数据卷 卷是在一个或多个容器内被选定的目录&#xff0c;为docker提供持久化数据或共享数据&#xff0c;是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效&#xff0c;当提交或创建镜像时&#xff0c;卷不被包括在镜像中。 总结为两…

下载最新VMware,社区版本(免费)

VMware - Delivering a Digital Foundation For BusinessesRun any app on any cloud on any device with a digital foundation built on VMware solutions for modern apps, multi-cloud, digital workspace, security & networking.https://www.vmware.com/ 官网地址