文章目錄
- 特殊pom.xml配置文件 - BOM
- 一、例子
- 二、注意事項
- 1.特殊的子pom.xml文件
- 2.dependencyManagement
特殊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標簽
- 對應值有
pom
、jar
、war
等 - pom適用場景:
- 父項目(用于管理子模塊):如上述
springboot-labs
- 聚合器項目(只做模塊聚合,不產生任何代碼)
- BOM 文件(管理依賴版本):如上述
kaishu-dependencies
- 父項目(用于管理子模塊):如上述