Java通用工程模塊bom包管理詳細代碼示例

一、什么是bom包?
BOM 的全稱是 Bill Of Materials(材料清單)。
在軟件開發(fā)的語境下,特別是在 Maven 中,BOM 是一個特殊的 POM(Project Object Model)文件。它的核心作用是統(tǒng)一管理一組相互關(guān)聯(lián)的依賴庫的版本,確保這些依賴的版本是相互兼容的,從而避免版本沖突。
您可以把它想象成一個依賴版本目錄或版本說明書。
二、BOM 的用途和優(yōu)勢
用途:
- 解決版本沖突:大型項目或微服務架構(gòu)中,會引入大量第三方庫。這些庫自身又可能依賴其他庫(傳遞性依賴)。如果不同模塊對同一個傳遞依賴的版本要求不一致,就會導致版本沖突。BOM 由官方或社區(qū)維護,它定義了所有相關(guān)依賴的“經(jīng)過測試且彼此兼容”的版本。
- 簡化依賴管理:使用 BOM 后,在項目中聲明依賴時,無需再指定版本號(
**<version>**標簽)。版本號由 BOM 統(tǒng)一提供。這使得 POM 文件更加簡潔,并且所有模塊使用的版本高度一致。 - 保證兼容性和穩(wěn)定性:BOM 的維護者會確保列表中所有依賴的版本組合是穩(wěn)定和兼容的。例如,Spring Boot 的 BOM 確保了特定的 Spring Framework、Spring Data、Spring Security 等版本可以完美地協(xié)同工作。
沒有 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 中“引用”依賴,無需關(guān)心版本。
<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、調(diào)研 Langchain4j BOM包案例
介紹
下面以 Langchain4j BOM 為例。
Langchain4j地址:https://github.com/langchain4j/langchain4j/blob/main/langchain4j-bom/pom.xml
langchain4j bom【定義自身工程版本模塊】

規(guī)范:
1、外層繼承l(wèi)angchain4j-parent
2、本身pom的packaging為pom
3、版本管理寫在dependencyManagement中
<?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>
<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包)

<?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>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>info@langchain4j.dev</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

<?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>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>
后續(xù)子模塊引入即可參考如下,無需寫版本:

方式二:繼承父 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包管理

實際上在這三個pom中主要都是維護模塊的版本,無非是第三方依賴版本,還是當前模塊的版本的區(qū)別。
dt-ai-bom:繼承dt-ai-parent,同時管理當前所有模塊的版本控制。
dt-ai-parent:管理所有第三方依賴的版本。
底層pom:module管理,管理所有當前整個系統(tǒng)的模塊。
dt-ai-bom
bom中繼承dt-ai-parent,同時管理當前所有模塊的版本:
<?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>
<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"?>
<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.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"?>
<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.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>
其他所有模塊引入依賴

對于其他部分都繼承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、工程模塊統(tǒng)一版本依賴
參考:https://dtstack.yuque.com/rd-center/sm6war/bshbu5qqml1ypz7a
1、全局的pom中補充插件以及全局版本配置項

<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}

<parent>
<groupId>com.dtstack</groupId>
<artifactId>knowledge-ai-chat</artifactId>
<version>${revision}</version>
</parent>
<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變量,引入模塊也可以使用,相當于全局參數(shù)通用。
總結(jié)
到此這篇關(guān)于Java通用工程模塊bom包管理的文章就介紹到這了,更多相關(guān)Java工程模塊bom包管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis樹形結(jié)構(gòu)查詢的實現(xiàn)示例
本文介紹了一種使用MyBatis進行樹形結(jié)構(gòu)查詢的方法,通過構(gòu)造臨時表和內(nèi)連接,實現(xiàn)了不同層級數(shù)據(jù)的一次性查詢及映射,感興趣的可以了解一下2025-11-11
解決idea啟動報錯javax.imageio.IIOException的問題
這篇文章主要介紹了idea啟動報錯javax.imageio.IIOException,解決打不開idea問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
springboot v2.0.3版本多數(shù)據(jù)源配置方法
這篇文章主要介紹了springboot v2.0.3版本多數(shù)據(jù)源配置方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下2018-11-11

