java - 项目和 BOM 依赖项之间有什么区别?

标签 java spring-boot maven gradle repository

我注意到 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/

相关文章:

java - 我正在尝试创建默认构造函数

maven 本地存储库代理外部

javascript - Vaadin 应用程序中发出蜂鸣声

java - 使用java创建Windows服务

java - 布局文件夹中的 XML 文件错误 : can not be resolved or is not a field

java - 排除 pom.xml 中为 jacoco 配置的内容并排除 sonar 中的文件

java - 未知错误 - Sonar Eclipse 插件

java - 无法将 JSON 发送到 Spring Boot 应用程序中的其余端点

java - 使 @Transactional 和 @Rollback 与 Spring Boot Test 一起使用

java - 使用服务用户或公共(public)用户保护 REST 端点