# Maven Bom 的使用

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级教程】YOLOv8目标检测:训练自己的数据集

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple二、数据准备 2.1 安装labelme标注软件 pip install label…

2024阿里云2核2G服务器租用价格99元和61元一年

阿里云2核2G服务器配置优惠价格61元一年和99元一年&#xff0c;61元是轻量应用服务器2核2G3M带宽、50G高效云盘&#xff1b;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large&#xff0c;2核2G、3M固定带宽、40G ESSD entry系统盘&#xff0c;阿里云活动链接 aliyunfuwuqi.…

[STM32] Keil MDK 新建工程编译不通过(warning: #2803-D和Error: L6218E)解决方法备忘

按照野火的PDF教程的第4章&#xff1a;[野火]《RT-Thread 内核实现与应用开发实战—基于STM32》.pdf 新建 Keil MDK 工程&#xff0c;工程设置完成后点击编译按钮&#xff0c;编译不通过&#xff1a; RTE\Device\ARMCM3\startup_ARMCM3.c(75): warning: #2803-D: unrecognize…

JVM快速入门(1)JVM体系结构、运行时数据区、类加载器、线程共享和独享、分区、Java对象实例化

5.1 JVM体系结构 线程独占区-程序计数器&#xff08;Program Counter Register&#xff09; 程序计数器是一块较小的内存空间&#xff0c;它可以看做是当前线程所执行的字节码的行号指示器&#xff1b;在虚拟机的概念模型里&#xff0c;字节码解释器工作时就是通过改变这个计数…

C++:练习题

一、构造、析构顺序 C c; int main() {A a;B b;static D d;return 0; } //构造顺序&#xff1a;C A B D //析构顺序&#xff1a;~B ~A ~D ~C 二、拷贝构造次数 以下代码共调用多少次拷贝构造&#xff1f; Widget f(Widget u) //第一次&#xff1a;传值拷贝构造 {Widget v(u…

【QT+QGIS跨平台编译】之九十:【QGIS_Crashhandler+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、QGIS_Crashhandler介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、QGIS_Crashhandler介绍 QGIS_Crashhandler模块是QGIS中的一个重要组成部分,它提供了QGIS程序的错误崩溃处理与跟踪。 二、QGIS下载 QGIS网址: QGIS Source Download 获取最新版本的…

【Linux系统编程(进程编程)】进程的退出:父进程等待子进程的退出之僵尸进程与孤儿进程

文章目录 一、进程退出1.1、进程正常退出方式1.2、异常退出 二、父进程等待子进程退出&#xff08;一&#xff09;2.1、为什么要等待子进程退出2.2、&#xff08;1&#xff09;父进程等待子进程退出并收集子进程的退出状态如何等待wstatus空wstatus非空 2.3、&#xff08;2&…

数据背后的力量:揭秘中间件中的二分查找与树结构应用

平时写业务代码的时候很少写对应的算法&#xff0c;因为很少会在内存中存储大量数据&#xff0c;在需要比较大量数据的查找时&#xff0c;多会依赖的中间件&#xff0c;而中间件底层就应用了很多不同算法&#xff0c;尤其是树结构的查找存储算法&#xff0c;二分查找算法在树里…

状态管理@Prop、@Link装饰器

Prop Link 父子组件进行数据同步化 prop 单向同步 只支持string、number、boolean、enum类型 负组件对象类型&#xff0c;总组件是对象类型 不可以是数组、any 不允许子组件初始化 Link双向同步 父子类型一直&#xff1a;string、number、boolean、enum、object、class以及他们…

centos7 yum 安装mysql8.0.36

一、前置条件&#xff1a;CentOS Mini 安装需要先安装ifconfig 和 wget工具&#xff0c;参考步骤&#xff1a; 1.首先&#xff0c;让我们找出哪个包提供了ifconfig命令。要完成这项任务&#xff0c;输入以下命令&#xff1a; yum provides ifconfig 输出&#xff1a; [rootlo…

Vue3 + Django 前后端分离项目实现密码认证登录

1、功能需求 通常中小型前后端项目&#xff0c;对安全要求不高&#xff0c;也可以采用密码认证方案。如果只用django来实现非常简单。采用 Vue3 前后端分离架构&#xff0c;实现起来稍繁琐一点&#xff0c;好处是可以利用各种前端技术栈&#xff0c;如element-plus UI库来渲染…

Android Jetpack Compose基础之组件的帧渲染

Android Jetpack Compose基础之组件的帧渲染 组合布局LayoutModifier示例 LayoutCompsable示例 绘制CanvasDrawModifierDrawModifier-drawWithContent示例 DrawModifier-drawBehind源码示例 DrawModifier-drawWithCache源码示例 拓展Modifier.graphicsLayer Android View 系统&…

6-191 拓扑排序

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

Polar 2024春季个人挑战赛 Jay17 WP

Polar 2024春季个人挑战赛 Rank&#xff1a;7 【WEB】机器人 开题 起手敏感文件robots.txt 【WEB】PHP反序列化初试 最简单的php反序列化 POC&#xff1a; <?php class Easy{public $name;public function __wakeup(){echo $this->name;} } class Evil{public $evi…

2、Jenkins持续集成-gitlab安装和源码上传

文章目录 1、Gitlab代码托管服务器安装2、源代码上传托管 环境&资源准备 统一采用VMware中安装CentOS7&#xff0c;安装教程&#xff0c;统一设置静态IP资源包都存在于我的资源里面 资源版本&位置 名称机器IP软件代码托管服务器192.168.2.100Gitlab-12.4.2持续集成服…

idm下载器 idm网络加速器 Internet Download Manager(IDM)免激活不弹窗版

idm下载器官方版英文名为Internet Download Manager。是一款界面简单、体积小巧下载速度飞快的下载工具&#xff0c;支持断点续传、多个任务同时下载&#xff0c;同时还支持限速下载&#xff0c;在自义文件类型里还可以自由设置下载的文件类型。 一、IDM软件安装 Internet Dow…

Linux安装Nginx及配置TCP负载均衡

目录 1、安装编译工具及库文件2、下载解压Nginx压缩包3、Ngnix配置Tcp负载均衡4、配置Ngnix的文件5、Nginx启动 1、安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel2、下载解压Nginx压缩包 wget https://nginx.o…

Docker 安装 Tomcat

目录 1. 总体步骤 2.安装tomcat 2.1 搜索 2.2 拉取 2.3 查看是否拉取到镜像 2.4 运行镜像 2.5 访问tomcat首页 1. 总体步骤 搜索镜像拉取镜像查看镜像启动镜像停止容器移除容器 2.安装tomcat 2.1 搜索 2.2 拉取 docker pull tomcat 2.3 查看是否拉取到镜像 docker …

连接医患的桥梁:深入了解互联网医院APP的开发与优化

当下&#xff0c;互联网技术的不断发展&#xff0c;越来越多的医院和医疗机构开始关注并投入到互联网医院APP的开发与优化中。接下来&#xff0c;小编将与大家共同探讨互联网医院APP的开发与优化。 一、互联网医院APP的开发原则 &#xff08;1&#xff09;用户体验至上 界面设…

卷积篇 | YOLOv8改进之主干网络中引入可变形卷积DConv

前言:Hello大家好,我是小哥谈。可变形卷积模块是一种改进的卷积操作,它可以更好地适应物体的形状和尺寸,提高模型的鲁棒性。可变形卷积模块的实现方式是在标准卷积操作中增加一个偏移量offset,使卷积核能够在训练过程中扩展到更大的范围,从而实现对尺度、长宽比和旋转等各…