如何确保 Spring Boot 额外的 Jackson 模块具有相同的版本?

Posted

技术标签:

【中文标题】如何确保 Spring Boot 额外的 Jackson 模块具有相同的版本?【英文标题】:How to make sure Spring Boot extra Jackson modules are of same version? 【发布时间】:2014-09-30 19:34:03 【问题描述】:

Spring Boot 已经包含核心 Jackson 依赖项 + 其他几个。

如果你例如想要添加 org.json 或 jsr-353 数据绑定模块来明确定义这些附加模块的版本。

有没有办法引用其他 Jackson 模块的相同版本?我想避免任何兼容性问题。

【问题讨论】:

你使用的是 Maven 还是 Gradle? 【参考方案1】:

在 Gradle 中,只需在依赖项部分之前添加 ext['jackson.version'] = 'specify version here'

【讨论】:

【参考方案2】:

明确指定您的依赖项并删除您不需要的依赖项,如下所示:

<!-- Add typical dependencies for a web application -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>jackson-databind</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20131018</version>
    </dependency>
</dependencies>

您还可以通过覆盖属性来更改内置库的版本。通过使用以下命令查看有效 POM 中的属性,可以找到属性列表。您可以在有效的 POM 中找到@Phil Web 提到的属性。

mvn help:effective-pom 

【讨论】:

【参考方案3】:

Spring Boot 为以下 Jackson 模块提供托管依赖项:

杰克逊注解 杰克逊核心 杰克逊数据绑定 杰克逊数据类型乔达 jackson-datatype-jsr310

如果您使用的是 maven,则可以使用 $jackson.version 属性在您自己的 POM 中定义其他模块。例如:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-whatever</artifactId>
    <version>$jackson.version</version>
</dependency>

【讨论】:

对于 Gradle 用户,如果您使用 Spring Boot Gradle 插件,您可以省略版本号以采用 Spring Boot 管理的依赖项,例如 Phil Webb 上面列出的那些 Jackson 模块。 (参见 Spring Boot 参考手册 > 13. 构建系统 > 13.3 Gradle)。

以上是关于如何确保 Spring Boot 额外的 Jackson 模块具有相同的版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 @ExceptionHandler(Exception.class) 在 Spring Boot 中最后被调用?

如何确保在 Apache Tomcat 中运行的 Spring Boot 应用程序中替换了环境变量占位符?

如果它是一个 Rest 控制器,如何确保 Spring boot 自动编组一个类的对象

如何使用 Spring Boot 注册辅助 servlet?

Spring Boot确保Web应用安全(登陆认证)

将 Spring Boot 应用程序的库放在额外的 lib 目录中