在球衣项目中包含球衣-bom 导入范围的依赖关系的目的是什么?

2022-09-02 03:06:47

使用工件生成基于的项目时the jersey-quickstart-grizzly2

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.7

pom 生成了一个可以删除的依赖项:jersey-bom

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

以及此依赖项:

<dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>

这是 maven 依赖关系图的样子:

enter image description here

在项目中包含依赖项的目的是什么?jersey-bom


答案 1

不应从 中删除 。jersey-bomdependencyManagement

物料清单(BOM)打包相关的依赖项,以便它们的版本将协同工作。您可以在此页面上的 maven 文档中阅读有关它的更多信息。

因为它存在于(而不是)中,所以它实际上并没有向项目添加依赖项,它只是集中了版本管理。如果您不熟悉其中的区别,请在此SO答案中阅读更多内容。dependencyManagementdependencies

基本上,BOM允许您根据需要添加任意数量的球衣依赖关系,而不必担心混合不良版本:

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-grizzly2-http</artifactId>
        <!-- NO VERSION NEEDED BECAUSE OF THE BOM -->
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <!-- NO VERSION NEEDED BECAUSE OF THE BOM -->
    </dependency>
</dependencies>

答案 2

推荐