在Wildfly 15上运行的JEE项目上,我试图将日志配置为json格式。为了复制我为最近的Spring项目做了几十次的工作,我将net.logstash.logback:logstash-logback-encoder:6.6作为一个runtimeOnly依赖项添加,因为我计划有一个logback.xml配置文件。
在构建我的应用程序和运行测试时,添加这个依赖项会导致一些测试失败:一些控制器不再能够序列化LocalDateTime。
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是类路径的部分。当我运行依赖项任务时,我得到以下内容:
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 (*)我真的不明白这是怎么发生的,为什么会冲突.
发布于 2021-11-28 14:08:48
我想我不明白原因,但是在尝试了不同的事情之后,只有将版本从6.6降到6.4才有所帮助。现在,依赖关系如下所示:
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编码器版本:
runtimeOnly ('net.logstash.logback:logstash-logback-encoder:7.0.1') {
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
}因此,如果有人了解正在发生的事情,以及如何使它更可靠的未来,不要犹豫,提出建议!
https://stackoverflow.com/questions/70144172
复制相似问题