如何确保 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 自动编组一个类的对象