Java通用工程模块bom包管理

Java通用工程模块bom包管理

文章目录

Java通用工程模块bom包管理

前言

博主介绍:✌目前全网粉丝4W+,ZEEKLOG博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。

博主所有博客文件目录索引:博客目录索引(持续更新)

ZEEKLOG搜索:长路

视频平台:b站-Coder长路

一、什么是bom包?

BOM 的全称是 Bill Of Materials(材料清单)。

在软件开发的语境下,特别是在 Maven 中,BOM 是一个特殊的 POM(Project Object Model)文件。它的核心作用是统一管理一组相互关联的依赖库的版本,确保这些依赖的版本是相互兼容的,从而避免版本冲突。

您可以把它想象成一个依赖版本目录版本说明书

二、BOM 的用途和优势

用途:

  1. 解决版本冲突:大型项目或微服务架构中,会引入大量第三方库。这些库自身又可能依赖其他库(传递性依赖)。如果不同模块对同一个传递依赖的版本要求不一致,就会导致版本冲突。BOM 由官方或社区维护,它定义了所有相关依赖的“经过测试且彼此兼容”的版本。
  2. 简化依赖管理:使用 BOM 后,在项目中声明依赖时,无需再指定版本号**<version>** 标签)。版本号由 BOM 统一提供。这使得 POM 文件更加简洁,并且所有模块使用的版本高度一致。
  3. 保证兼容性和稳定性:BOM 的维护者会确保列表中所有依赖的版本组合是稳定和兼容的。例如,Spring Boot 的 BOM 确保了特定的 Spring Framework、Spring Data、Spring Security 等版本可以完美地协同工作。

没有 BOM 时:你需要为每个依赖手动指定版本,并自行确保它们兼容。

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.23</version><!-- 需要自己指定 --></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.23</version><!-- 必须和上面的版本匹配 --></dependency></dependencies>

有 BOM 时:你只需要从 BOM 中“引用”依赖,无需关心版本。

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><!-- 版本由BOM管理 --></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><!-- 版本由BOM管理 --></dependency></dependencies>

三、如何使用 BOM(Maven 案例)

3.1、调研 Langchain4j BOM包案例

介绍

下面以 Langchain4j BOM 为例。

Langchain4j地址:https://github.com/langchain4j/langchain4j/blob/main/langchain4j-bom/pom.xml

langchain4j bom【定义自身工程版本模块】
img

规范:

1、外层继承langchain4j-parent

2、本身pom的packaging为pom

3、版本管理写在dependencyManagement中

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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><parent><groupId>dev.langchain4j</groupId><artifactId>langchain4j-parent</artifactId><version>1.4.0-beta10-SNAPSHOT</version><relativePath>../langchain4j-parent/pom.xml</relativePath></parent><artifactId>langchain4j-bom</artifactId><version>1.4.0-SNAPSHOT</version><packaging>pom</packaging><name>LangChain4j :: BOM</name><description>Bill of Materials POM for getting full, complete set of compatible versions of LangChain4j modules</description><dependencyManagement><dependencies><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-core</artifactId><version>1.4.0-SNAPSHOT</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId><version>1.4.0-beta10-SNAPSHOT</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-core</artifactId><version>1.4.0-SNAPSHOT</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>1.4.0-SNAPSHOT</version></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-test</artifactId><version>1.4.0-beta10-SNAPSHOT</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><configuration><flattenMode>bom</flattenMode><pomElements><properties>remove</properties><distributionManagement>remove</distributionManagement></pomElements></configuration><executions><execution><id>flatten</id><goals><goal>flatten</goal></goals><phase>process-resources</phase></execution><execution><id>flatten.clean</id><goals><goal>clean</goal></goals></execution></executions></plugin></plugins></build></project>
langchain4j parent(定义外部依赖jar包)
img
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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>dev.langchain4j</groupId><artifactId>langchain4j-parent</artifactId><version>1.4.0-beta10-SNAPSHOT</version><packaging>pom</packaging><name>LangChain4j :: Parent POM</name><description>${project.name}</description><url>https://github.com/langchain4j/langchain4j/tree/main</url><licenses><license><name>The Apache Software License, Version 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0.txt</url><distribution>repo</distribution></license></licenses><developers><developer><id>dliubarskyi</id><name>Dmytro Liubarskyi</name><email>[email protected]</email><url>https://github.com/dliubarskyi</url></developer></developers><properties><java.version>17</java.version><maven.compiler.release>${java.version}</maven.compiler.release><kotlin.code.style>official</kotlin.code.style><kotlin.compiler.jvmTarget>${java.version}</kotlin.compiler.jvmTarget><kotlin.compiler.languageVersion>1.9</kotlin.compiler.languageVersion><properties/><dependencyManagement><dependencies><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.18.0</version></dependency> .... </dependencies></dependencyManagement> ... 
顶层目录pom
img
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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>dev.langchain4j</groupId><artifactId>langchain4j-aggregator</artifactId><version>1.4.0-beta10-SNAPSHOT</version><packaging>pom</packaging><name>LangChain4j :: Aggregator</name><modules><module>langchain4j-parent</module><module>langchain4j-bom</module><module>langchain4j-core</module><module>langchain4j-test</module><module>langchain4j</module><module>langchain4j-kotlin</module><module>langchain4j-easy-rag</module><module>langchain4j-mcp</module>

主要用来管理modules模块的。

如何使用?

方式一:直接导入bom依赖

通常我们将使用的bom包引入dependencymanagment管理:

<dependencyManagement><dependencies><!--引入SpringBoot依赖管理清单--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--引入langchain4j依赖管理清单--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency><!--引入百炼依赖管理清单--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency>

后续子模块引入即可参考如下,无需写版本:

img
方式二:继承父 POM

可间接直接使用parent中管理的外部第三方依赖版本适配:

<project><!-- 指定父POM --><parent><groupId>dev.langchain4j</groupId><artifactId>langchain4j-parent</artifactId><version>1.4.0-beta10-SNAPSHOT</version><relativePath/></parent><groupId>com.example</groupId><artifactId>my-spring-boot-app</artifactId><version>1.0.0</version><dependencies><!-- 无需指定版本,版本由父POM管理 --><!--langchain4j高级功能--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId></dependency>

3.2、自定义bom、parent包管理

img

实际上在这三个pom中主要都是维护模块的版本,无非是第三方依赖版本,还是当前模块的版本的区别。

dt-ai-bom:继承dt-ai-parent,同时管理当前所有模块的版本控制。

dt-ai-parent:管理所有第三方依赖的版本。

底层pom:module管理,管理所有当前整个系统的模块。

dt-ai-bom

bom中继承dt-ai-parent,同时管理当前所有模块的版本:

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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><parent><groupId>com.dtstack</groupId><artifactId>dt-ai-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../dt-ai-parent/pom.xml</relativePath></parent><artifactId>dt-ai-bom</artifactId><packaging>pom</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>com.dtstack</groupId><artifactId>dt-ai-core</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.dtstack</groupId><artifactId>knowledge-ai-server</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.dtstack</groupId><artifactId>knowledge-common</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.dtstack</groupId><artifactId>zentao-mcp-server</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.dtstack</groupId><artifactId>knowledge-warehouse-base</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.dtstack</groupId><artifactId>knowledge-warehouse-yuque</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></dependencyManagement></project>

dt-ai-parent

独立存在,用于管理所有第三方依赖的版本:

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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.dtstack</groupId><artifactId>dt-ai-parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.2.6</spring-boot.version><knife4j.version>4.3.0</knife4j.version><langchain4j.version>1.0.0-beta4</langchain4j.version><mybatis-spring-boot.version>3.0.4</mybatis-spring-boot.version><druid-spring-boot.version>1.2.18</druid-spring-boot.version></properties><dependencyManagement><dependencies><!--引入SpringBoot依赖管理清单--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--引入langchain4j依赖管理清单--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency><!--引入百炼依赖管理清单--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-bom</artifactId><version>${langchain4j.version}</version><type>pom</type><scope>import</scope></dependency> ... <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.12.0</version></dependency></dependencies></dependencyManagement><distributionManagement><repository><id>dtstack-release</id><url>http://nexus.dev.dtstack.cn/nexus/content/repositories/dtstack-release/</url></repository><snapshotRepository><id>dtstack-snapshot</id><url>http://nexus.dev.dtstack.cn/nexus/content/repositories/dtstack-snapshot/</url></snapshotRepository></distributionManagement></project>

pom.xml

用于进行所有模块的管控

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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.dtstack</groupId><artifactId>knowledge-ai-chat</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>dt-ai-parent</module><module>dt-ai-bom</module><module>dt-ai-core</module><module>knowledge-common</module><module>knowledge-mcp-servers/zentao-mcp-server</module><module>knowledge-ai-server</module><module>knowledge-warehouse/knowledge-warehouse-base</module><module>knowledge-warehouse/knowledge-warehouse-yuque</module></modules><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><distributionManagement><repository><id>dtstack-release</id><url>http://nexus.dev.dtstack.cn/nexus/content/repositories/dtstack-release/</url></repository><snapshotRepository><id>dtstack-snapshot</id><url>http://nexus.dev.dtstack.cn/nexus/content/repositories/dtstack-snapshot/</url></snapshotRepository></distributionManagement></project>

其他所有模块引入依赖

img

对于其他部分都继承dt-ai-parent模块:

<parent><groupId>com.dtstack</groupId><artifactId>dt-ai-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../dt-ai-parent/pom.xml</relativePath></parent><artifactId>knowledge-ai-server</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>

3.3、工程模块统一版本依赖

参考:https://dtstack.yuque.com/rd-center/sm6war/bshbu5qqml1ypz7a

1、全局的pom中补充插件以及全局版本配置项

img
<groupId>com.dtstack</groupId><artifactId>knowledge-ai-chat</artifactId><version>${revision}</version><packaging>pom</packaging><properties><!-- 全局ai-chat模块管理 --><revision>1.2.0-SNAPSHOT</revision><maven.flatten.version>1.2.5</maven.flatten.version></properties><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>${maven.flatten.version}</version><configuration><flattenedPomFilename>pom-xml-flattened</flattenedPomFilename><updatePomFile>true</updatePomFile><flattenMode>resolveCiFriendliesOnly</flattenMode></configuration><executions><execution><id>flatten</id><phase>process-resources</phase><goals><goal>flatten</goal></goals></execution><execution><id>flatten.clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin></plugins></build>

2、所有的子模块,在进行parent标签设置的时候都使用${revision}

img
<parent><groupId>com.dtstack</groupId><artifactId>knowledge-ai-chat</artifactId><version>${revision}</version></parent>
img
<modelVersion>4.0.0</modelVersion><parent><groupId>com.dtstack</groupId><artifactId>dt-ai-parent</artifactId><version>${revision}</version><relativePath>../dt-ai-parent/pom.xml</relativePath></parent><dependencies><dependency><groupId>com.dtstack</groupId><artifactId>knowledge-warehouse-yuque</artifactId><version>${revision}</version></dependency></dependencies>

对于parent也可使用revision变量,引入模块也可以使用,相当于全局参数通用。

资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅

Read more

蓝桥杯手把手教你备战(C/C++ B组)(最全面!最贴心!适合小白!)

蓝桥杯手把手教你备战(C/C++ B组)(最全面!最贴心!适合小白!)

比赛环境:网盘资源分享 通过网盘分享的文件:蓝桥杯比赛环境 链接: https://pan.baidu.com/s/1eh85AW-y83ibCmEo8ByBwA?pwd=1234 提取码: 1234 1 常见问题答疑 1.1 蓝桥杯含金量高不高? 说起蓝桥杯,不得不提ACM。 ACM是国际大学生程序设计竞赛(ACM-ICPC),被誉为计算机领域的“奥运会”,是世界上,规模最大、水平最高、最具影响力的国际大学生程序设计竞赛。 ACM难度较高,当然含金量也更高, 那么蓝桥杯的含金量肯定比不过ACM,但是其具有独特的优势。 蓝桥杯难度更低,更易拿奖,同时在计算机行业具有较高认可度。 ACM适合那些智商高或者编程经验丰富(学习算法1年以上)的选手参赛。而蓝桥杯适合小白,适合期望快速获得编程领域一个认可证书而没有太多时间投入的参赛者。 1.2 获奖到底难不难? 蓝桥杯分为省赛和国赛。 省赛时: 与你竞争的是同省的人,所以获奖难度与你所在的省份有一定关系。 强省(

By Ne0inhk
【Linux】线程池(二)C++ 手写线程池全流程:从核心设计到线程安全、死锁深度解析

【Linux】线程池(二)C++ 手写线程池全流程:从核心设计到线程安全、死锁深度解析

文章目录 * 实现线程池 * ThreadPool类设计 * 构造函数 * Start接口 * 线程池接入日志 * 初步实现源码及效果图 * 总结代码执行逻辑 * 实现回调函数Routine * enqueue接口实现 * 线程池退出stop接口优化 * 线程池源码 * 线程安全和重入问题 * 结论 * 死锁 * 死锁四个必要条件 * 避免死锁 * STL、智能指针和线程安全 实现线程池 我们之前已经接触了进程池,其实线程池和进程池核心思路差不多,对于线程池来说,会有一个任务队列和若干线程,用户往任务队列里添加任务,若干线程在任务队列里拿任务并完成。 ThreadPool类设计 构造函数 对于线程来说,启动线程池分为两步: 1.先创建线程本身(Thread类对象)2.再启动线程(调用Thread的start接口) 所以在构造函数我们要先创建线程本身(thread t(回调函数,线程名)),创建线程需要传递回调函数(假设是hello)和线程名,但这里有一个问题,一般来说传递的

By Ne0inhk
2026年3月GESP真题及题解(C++一级):数字替换

2026年3月GESP真题及题解(C++一级):数字替换

2026年3月GESP真题及题解(C++一级):数字替换 题目描述 Alice 不喜欢 4,喜欢 8,她想把 4 全换成 8,若无 4 则不修改。 输入格式 输入一行,一个整数 A,表示替换前的数。 输出格式 输出一行,包含一个整数 B,表示替换后的数。 样例 样例 1: 输入: 8459045 输出: 8859085 样例 2: 输入: 123 输出: 123 数据范围 * 0 ≤ A ≤ 10 9 0 \leq A \leq 1

By Ne0inhk
基于飞算 JavaAI 高效开发电商系统核心功能模块实战指南

基于飞算 JavaAI 高效开发电商系统核心功能模块实战指南

基于飞算 JavaAI 高效开发电商系统核心功能模块实战指南 在电商系统开发领域,效率与稳定性始终是开发者追求的核心目标。传统 Java 开发模式下,电商系统的商品管理、订单处理、支付集成等核心模块往往需要大量重复编码、复杂的异常处理和繁琐的性能优化工作。飞算 JavaAI 作为新一代智能开发工具,通过 AI 驱动的代码生成、自动化测试与性能优化能力,可将电商核心模块的开发效率提升 60% 以上。本文将以主流电商系统的三大核心模块为例,详细讲解如何利用飞算 JavaAI 实现从需求定义到上线部署的全流程高效开发。 一、飞算 JavaAI 电商开发环境准备 1.1 开发环境配置 打开Idea,戳进插件市场(快捷键:Ctrl+Alt+S),搜索‘CalEx-JavaAI’或者’飞算’,安装完成后重启,并登录飞算。 1.2 核心技术栈说明 技术组件版本飞算 JavaAI

By Ne0inhk