我注意到 Kubernetes 客户端的 fabric8.io 有两个以项目和 BOM 结尾的依赖项。
我注意到的唯一区别是它首先有一个分布式版本。同样根据 apache 指南,bom 通常用作项目的父级。
还有其他用途/区别吗?我应该在 Spring Boot 中使用哪个依赖项?
最佳答案
BOM 项目既可以用作 Maven 模块的父级,也可以作为 BOM 依赖项导入,从而允许您从该 BOM 导入依赖项。关于这个问题的一篇非常好的文章可以找到here .
为什么 BOM 很重要?由于您已在问题中添加了 Spring 标记,因此假设您想使用某个 Spring 版本,并且 component_1 可以与 component_2 一起使用,只要它们具有相同的版本即可。作为库开发人员,您将拥有一个包含 component_1 和 component_2 的版本化 BOM,并且在您的项目中,您需要导入带有您需要的版本的 BOM 和您需要的没有版本的组件,因为它将从您导入的 Material list /父级。这正是 Spring 所做的。
如果上面的链接将来无法使用,这里是 BOM 的基本工作流程。
// BOM project
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>baeldung</groupId>
<artifactId>Baeldung-BOM</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>BaelDung-BOM</name>
<description>parent pom</description>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>b</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
// importing the BOM in your project
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>baeldung</groupId>
<artifactId>Test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Test</name>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>baeldung</groupId>
<artifactId>Baeldung-BOM</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<dependency>
<groupId>test</groupId>
<artifactId>b</artifactId>
<!-- version and scope omitted, inherited from the BOM, 1.0 and compile (you can override them here, but that defeats the purpose) -->
</dependency>
</dependencies>
</project>
请注意,导入 BOM 不会添加在
dependencyManagement
中指定的所有依赖项。部分,除非您将它们添加到 dependencies
项目的一部分。它就像一个产品目录,它向您展示 BOM 为您提供的内容。Here是 Spring Boot 2.3.0 依赖 pom.xml,带有
dependencyManagement
部分以查看真实世界 BOM 的外观(或者如果需要,也可以只是父级)。如果你曾经想使用 Spring 6、Hibernate 5 和 JUnit 5 & Assertion lib 的 friend ,假设它们都提供了一个 BOM,你可以包含这 3 个 BOM,并且每次你需要为你的项目升级 Spring 版本时,你都可以d 需要更新导入的 Spring BOM 版本。
关于java - 项目和 BOM 依赖项之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61812959/