Maven特殊pom.xml配置文件-BOM解读

 更新时间:2025年05月31日 18:40:05   作者:weixin_45658815  
这篇文章主要介绍了Maven特殊pom.xml配置文件-BOM解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

特殊pom.xml配置文件 - BOM

仅用于集中管理项目依赖版本

在 Maven 中,BOM 用于定义一个项目的依赖版本的集合,通常用于管理一组共享的依赖版本。

这意味着你可以将一组依赖版本集中管理,避免在每个项目中单独定义每个依赖的版本,从而确保多个模块之间的版本一致性。

一、例子

<?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>org.kaishu</groupId>
    <artifactId>kaishu-dependencies</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>

    <properties>
        <revision>2.0.0-snapshot</revision>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

	<!-- 只提供一个版本管理的基础,并不具体导入依赖。-->
    <dependencyManagement>
        <dependencies>
	       <dependency>
	           <groupId>org.springframework</groupId>
	           <artifactId>spring-core</artifactId>
	           <version>5.3.8</version>
	       </dependency>
	       <!-- 其他依赖 -->
        </dependencies>
    </dependencyManagement>
</project>

二、注意事项

1.特殊的子pom.xml文件

在项目中BOM的位置与一般子POM一致,并且你依然可将其当做子POM通过< module >元素引入到父POM中,具体是否引入,主要取决于你是否需要通过父项目一键构建所有模块。但是BOM文件不可继承父POM,即BOM文件中不可声明< parent >元素,避免因继承结构导致循环依赖,即报错:import form a cycle。

父POM中加入BOM依赖示例如下:

<?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>org.kaishu</groupId>
    <artifactId>springboot-labs</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>
    <modules>
        <module>kaishu-dependencies</module>
    </modules>

    <properties>
        <revision>2.0.0-snapshot</revision>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.kaishu</groupId>
                <artifactId>kaishu-dependencies</artifactId>
                <version>${revision}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

2.dependencyManagement

dependencyManagement 元素只提供一个版本管理的基础,并不具体导入依赖。

可查看maven依赖树发现kaishu-dependencies模块和父模块springboot-labs下是没有对应依赖的,而其他模块则有具体的依赖。

3.packaging标签

对应值有pomjarwar

pom适用场景:

  • 父项目(用于管理子模块):如上述springboot-labs
  • 聚合器项目(只做模块聚合,不产生任何代码)
  • BOM 文件(管理依赖版本):如上述kaishu-dependencies

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud Alibaba Sentinel 从入门到精通

    SpringCloud Alibaba Sentinel 从入门到精通

    本文介绍了Sentinel的核心概念、使用方式及规则配置,Sentinel是阿里巴巴开源的流量控制框架,主要应用于流量控制、熔断降级等场景,文中有详细的规则配置示例,并介绍了如何与Feign整合,感兴趣的朋友一起看看吧
    2026-04-04
  • SpringBoot复杂参数应用详细讲解

    SpringBoot复杂参数应用详细讲解

    我们在编写接口时会传入复杂参数,如Map、Model等,这种类似的参数会有相应的参数解析器进行解析,并且最后会将解析出的值放到request域中,下面我们一起来探析一下其中的原理
    2022-09-09
  • 解决lombok的@Data注解无法打印继承的父类信息问题

    解决lombok的@Data注解无法打印继承的父类信息问题

    在Java编程中,使用@Data注解可能导致子类继承父类属性后,打印只显示子类信息不显示父类信息,问题源于@Data注解作用域仅限于当前类,解决方法包括使用@ToString(callSuper=true)注解或重写toString方法
    2024-11-11
  • java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题

    java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题

    这篇文章主要介绍了java 解决异常 2 字节的 UTF-8 序列的字节 2 无效的问题的相关资料,需要的朋友可以参考下
    2016-12-12
  • MyBatis-Plus中如何实现动态表名

    MyBatis-Plus中如何实现动态表名

    这篇文章主要介绍了MyBatis-Plus中如何实现动态表名问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringCloud通过Feign传递List类型参数方式

    SpringCloud通过Feign传递List类型参数方式

    这篇文章主要介绍了SpringCloud通过Feign传递List类型参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot 正确的在异步线程中使用request的示例代码

    springboot 正确的在异步线程中使用request的示例代码

    这篇文章主要介绍了springboot中如何正确的在异步线程中使用request,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Java中数组与栈和堆之间的关系说明

    Java中数组与栈和堆之间的关系说明

    文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性
    2025-08-08
  • java实现Redisson看门狗机制

    java实现Redisson看门狗机制

    redission看门狗机制是解决分布式锁的续约问题,本文就来详细的介绍一下java实现Redisson看门狗机制,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09
  • Spring @Value的注解使用和原理解析

    Spring @Value的注解使用和原理解析

    @Value注解在Spring开发中是一个使用很频繁的注解,在项目开发中,我们通常需要读取配置文件中的一些信息,当然,@Value不单单能读取配置文件,还能读取系统属性,还可以读取其他bean的属性,本章就来详细介绍@Value注解的使用和对源码进行分析
    2023-06-06

最新评论