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

tar*_*lah 18 java jersey java-ee maven jersey-2.0

使用工件生成基于的项目时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
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

这种依赖:

<dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这是maven依赖图的样子:

在此输入图像描述

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

Ald*_*den 39

你不应该删除jersey-bomdependencyManagement.

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

因为它存在于dependencyManagement(而不是dependencies)中,它实际上并没有为项目添加依赖项,它只是集中了版本管理.如果您不熟悉这种差异,请在此SO答案中阅读更多内容.

基本上,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>
Run Code Online (Sandbox Code Playgroud)