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>
<!-- 只提供一個版本管理的基礎(chǔ),并不具體導(dǎo)入依賴。-->
<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一致,并且你依然可將其當(dāng)做子POM通過< module >元素引入到父POM中,具體是否引入,主要取決于你是否需要通過父項目一鍵構(gòu)建所有模塊。但是BOM文件不可繼承父POM,即BOM文件中不可聲明< parent >元素,避免因繼承結(jié)構(gòu)導(dǎo)致循環(huán)依賴,即報錯: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 元素只提供一個版本管理的基礎(chǔ),并不具體導(dǎo)入依賴。
可查看maven依賴樹發(fā)現(xiàn)kaishu-dependencies模塊和父模塊springboot-labs下是沒有對應(yīng)依賴的,而其他模塊則有具體的依賴。

3.packaging標(biāo)簽
對應(yīng)值有pom、jar、war等
pom適用場景:
- 父項目(用于管理子模塊):如上述
springboot-labs - 聚合器項目(只做模塊聚合,不產(chǎn)生任何代碼)
- BOM 文件(管理依賴版本):如上述
kaishu-dependencies
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud Alibaba Sentinel 從入門到精通
本文介紹了Sentinel的核心概念、使用方式及規(guī)則配置,Sentinel是阿里巴巴開源的流量控制框架,主要應(yīng)用于流量控制、熔斷降級等場景,文中有詳細(xì)的規(guī)則配置示例,并介紹了如何與Feign整合,感興趣的朋友一起看看吧2026-04-04
SpringBoot復(fù)雜參數(shù)應(yīng)用詳細(xì)講解
我們在編寫接口時會傳入復(fù)雜參數(shù),如Map、Model等,這種類似的參數(shù)會有相應(yīng)的參數(shù)解析器進(jìn)行解析,并且最后會將解析出的值放到request域中,下面我們一起來探析一下其中的原理2022-09-09
java 解決異常 2 字節(jié)的 UTF-8 序列的字節(jié)2 無效的問題
這篇文章主要介紹了java 解決異常 2 字節(jié)的 UTF-8 序列的字節(jié) 2 無效的問題的相關(guān)資料,需要的朋友可以參考下2016-12-12
MyBatis-Plus中如何實現(xiàn)動態(tài)表名
這篇文章主要介紹了MyBatis-Plus中如何實現(xiàn)動態(tài)表名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringCloud通過Feign傳遞List類型參數(shù)方式
這篇文章主要介紹了SpringCloud通過Feign傳遞List類型參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
springboot?正確的在異步線程中使用request的示例代碼
這篇文章主要介紹了springboot中如何正確的在異步線程中使用request,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

