特殊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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论