首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle运行时依赖关系使测试失败,因为jackson依赖关系问题。

gradle运行时依赖关系使测试失败,因为jackson依赖关系问题。
EN

Stack Overflow用户
提问于 2021-11-28 14:08:48
回答 1查看 422关注 0票数 1

在Wildfly 15上运行的JEE项目上,我试图将日志配置为json格式。为了复制我为最近的Spring项目做了几十次的工作,我将net.logstash.logback:logstash-logback-encoder:6.6作为一个runtimeOnly依赖项添加,因为我计划有一个logback.xml配置文件。

在构建我的应用程序和运行测试时,添加这个依赖项会导致一些测试失败:一些控制器不再能够序列化LocalDateTime。

代码语言:javascript
复制
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: de.gefa.tankkarte.common.port.adapter.restapi.RestServiceErrorResponseEntity["timestamp"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
    at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276)
    at com.fasterxml.jackson.databind.ser.impl.UnsupportedTypeSerializer.serialize(UnsupportedTypeSerializer.java:35)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1514)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006)
    at org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.writeTo(ResteasyJackson2Provider.java:328)
    at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.writeTo(AbstractWriterInterceptorContext.java:137) 

我不明白为什么用于日志记录的依赖关系会干扰构建REST响应的方式.而jackson-datatype-jsr310 310是类路径的部分。当我运行依赖项任务时,我得到以下内容:

代码语言:javascript
复制
runtimeClasspath - Runtime classpath of source set 'main'.
...
+--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.4 -> 2.12.0
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.12.0
|    |    \--- com.fasterxml.jackson:jackson-bom:2.12.0
|    |         +--- com.fasterxml.jackson.core:jackson-annotations:2.12.0 (c)
|    |         +--- com.fasterxml.jackson.core:jackson-core:2.12.0 (c)
|    |         +--- com.fasterxml.jackson.core:jackson-databind:2.12.0 (c)
|    |         \--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.0 (c)
|    +--- com.fasterxml.jackson.core:jackson-core:2.12.0
|    |    \--- com.fasterxml.jackson:jackson-bom:2.12.0 (*)
|    +--- com.fasterxml.jackson.core:jackson-databind:2.12.0
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.12.0 (*)
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.12.0 (*)
|    |    \--- com.fasterxml.jackson:jackson-bom:2.12.0 (*)
|    \--- com.fasterxml.jackson:jackson-bom:2.12.0 (*)
...
+--- net.logstash.logback:logstash-logback-encoder:6.6
|    \--- com.fasterxml.jackson.core:jackson-databind:2.12.0 (*)

我真的不明白这是怎么发生的,为什么会冲突.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-28 14:08:48

我想我不明白原因,但是在尝试了不同的事情之后,只有将版本从6.6降到6.4才有所帮助。现在,依赖关系如下所示:

代码语言:javascript
复制
runtimeClasspath - Runtime classpath of source set 'main'.
...
+--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.4
|    +--- com.fasterxml.jackson.core:jackson-annotations:2.10.4 -> 2.11.0
|    +--- com.fasterxml.jackson.core:jackson-core:2.10.4 -> 2.11.0
|    \--- com.fasterxml.jackson.core:jackson-databind:2.10.4 -> 2.11.0
|         +--- com.fasterxml.jackson.core:jackson-annotations:2.11.0
|         \--- com.fasterxml.jackson.core:jackson-core:2.11.0
...
+--- net.logstash.logback:logstash-logback-encoder:6.4
|    \--- com.fasterxml.jackson.core:jackson-databind:2.11.0 (*)

我不明白为什么jackson-datatype- case 310:2.10.4不能在2.11.0之前自动升级到2.12.0。

这目前还可以,但对未来来说有点困难:下次有人试图升级这个应用程序的版本时,可能会出现一些问题。

看起来同样有效的是,如果我排除了传递依赖-那么,我甚至可以使用最新的logback编码器版本:

代码语言:javascript
复制
runtimeOnly ('net.logstash.logback:logstash-logback-encoder:7.0.1') {
    exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
}

因此,如果有人了解正在发生的事情,以及如何使它更可靠的未来,不要犹豫,提出建议!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70144172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档