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

【Java】2025 年 Java 学习路线:从入门到精通

【Java】2025 年 Java 学习路线:从入门到精通

文章目录 * 一、Java基础阶段(4-8周) * 1. 开发环境搭建 * 2. 核心语法基础 * 3. 面向对象编程(OOP) * 4. 核心类库 (Java SE API) * 5. 关联技术基础 * 二、Java 进阶阶段(6-10周) * 1. JVM 深度理解 * 2. 并发编程 - 应对高并发挑战 * 3. Java新特性 - 拥抱现代化 * 4. 设计模式 * 三、数据库与MySQL(2-3周) * 1. 环境搭建 * 2. SQL核心与进阶 * 3. 数据库设计与性能优化 * 四、开发框架与中间件(8-12周) * 1. Spring 生态

By Ne0inhk
Java 部署:Jenkins Pipeline 构建 Java 项目(自动化)

Java 部署:Jenkins Pipeline 构建 Java 项目(自动化)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java部署这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 部署:Jenkins Pipeline 构建 Java 项目(自动化) 🚀 * 为什么选择 Jenkins Pipeline?🔧 * 环境准备:搭建 Jenkins 服务器 ⚙️ * 使用 Docker 快速启动 Jenkins * 安装必要插件 * 示例 Java 项目:一个简单的 Spring Boot 应用 🌱 * 项目结构 * `pom.xml` * `DemoApplication.java` * `HelloController.java` * 单元测试(可选但推荐) * 编写 Jenkins

By Ne0inhk
【Java 开发日记】我们来说一下 MySQL 的慢查询日志

【Java 开发日记】我们来说一下 MySQL 的慢查询日志

目录 一、什么是慢查询日志 二、核心作用 三、配置参数详解 四、开启和配置 1. 临时开启(重启失效) 2. 永久开启(修改配置文件) 五、慢查询日志格式分析 典型日志条目: 关键字段解释: 六、慢查询分析工具 1. mysqldumpslow(MySQL 自带) 2. pt-query-digest(Percona Toolkit) 3. mysqlslow(第三方工具) 七、慢查询日志表模式 启用表模式存储: 表结构: 八、最佳实践和优化建议 1. 阈值设置建议 2. 日志轮转配置 3. 定期分析计划 九、性能监控和告警 1. 监控慢查询数量 2. 慢查询告警脚本

By Ne0inhk

飞算JavaAI代码审查落地难题:90%团队忽略的4个关键细节

第一章:飞算JavaAI代码合规检查概述 飞算JavaAI代码合规检查是一款面向Java开发者的智能化代码质量管控工具,深度融合静态代码分析与人工智能技术,旨在提升代码安全性、可维护性与规范性。该工具不仅支持常见的编码规范检测(如阿里巴巴Java开发手册),还能基于AI模型识别潜在的业务逻辑缺陷和安全漏洞。 核心功能特点 * 智能规则引擎:内置数百条行业标准规则,覆盖命名规范、异常处理、并发控制等关键维度 * AI辅助诊断:通过机器学习模型分析历史缺陷数据,预测高风险代码段 * 实时反馈机制:在IDE插件中实现编码过程中的即时提示,提升修复效率 * 企业级策略管理:支持自定义规则集,满足不同组织的合规要求 典型使用场景 场景说明代码提交前检查集成至Git预提交钩子,阻止不合规代码入库CI/CD流水线集成作为构建阶段的质量门禁,确保上线代码符合标准团队代码评审辅助自动生成评审报告,聚焦关键问题点 快速接入示例 以下为Maven项目中引入飞算JavaAI检查插件的基本配置: <build> <plugins> <!-- 飞算JavaAI合规检查插件 -->

By Ne0inhk