繁体   English   中英

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

[英]Whats the difference between project and BOM dependencies?

我注意到 Kubernetes 客户端的 fabric8.io 有两个以项目和 BOM 结尾的依赖项。

我注意到的唯一区别是它首先有一个分布式版本。 另外根据 apache 指南,bom 通常用作项目的父级。

还有其他用途/区别吗? 我应该在 Spring 引导中使用哪个依赖项?

BOM 项目既可以用作 Maven 模块的父项,也可以作为 BOM 依赖项导入,允许您从该 BOM 导入依赖项。 关于这个问题的一篇非常好的文章可以在这里找到。

为什么 BOM 很重要? 由于您已在问题中添加了 Spring 标签,假设您想使用某个 Spring 版本,并且只要它们具有相同的版本,component_1 就可以与 component_2 一起正常工作。 作为库开发人员,您将拥有一个包含 component_1 和 component_2 的版本化 BOM,并且在您的项目中,您需要导入带有您需要的版本的 BOM 和您需要的没有版本的组件,因为它将继承自您导入的物料清单/父级。 这正是 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 为您提供的内容。

是 Spring 启动 2.3.0 依赖项 pom.xml,带有dependencyManagement部分,以查看真实世界 BOM 的样子(或者只是父项,如果您愿意)。

If you ever wanted to use Spring 6, Hibernate 5 and JUnit 5 & Assertion lib friends, assuming that all of them provide a BOM, you could include those 3 BOMs and every time you need to upgrade Spring version for your project, all you' d 需要更新导入的 Spring BOM 的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM