# Maven Bom 的使用

Maven Bom 的使用

文章目录

概述

  • 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常用仓库地址
  • 阿里云仓库

    xml 复制代码
    <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 复制代码
<?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

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 复制代码
<?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 复制代码
<?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

完整代码

相关推荐
丁总学Java15 小时前
Maven项目打包,com.sun.tools.javac.processing
java·maven
疯一样的码农18 小时前
Apache Maven简介
java·maven·apache
Lucky me.20 小时前
本地maven添加jar包
okhttp·maven·jar
疯一样的码农20 小时前
Apache Maven 标准文件目录布局
java·maven·apache
佳佳_1 天前
使用 Maven Archetype 创建 Spring Boot 项目
spring boot·后端·maven
尘浮生2 天前
Java项目实战II基于微信小程序的私家车位共享系统(开发文档+数据库+源码)
java·开发语言·数据库·学习·微信小程序·小程序·maven
Ttang232 天前
Maven的安装——给Idea配置Maven
java·maven·intellij-idea
攀小黑2 天前
IDEA 添加外部.jar包。maven本地仓库录入新jar包。IDEA maven 命令巧妙使用。
maven·intellij-idea·jar
Uncommon.3 天前
为什么要用Maven?
java·maven
乌夷3 天前
在pom.xml中通过repositories在Maven构建过程中访问setting.xml之外的仓库
xml·java·maven