引发java.lang.NoSuchFieldError的未知冲突:WRITE_DURATIONS_AS_TIMESTAMPS

时间:2019-06-26 20:04:06

标签: java maven wildfly jodatime fasterxml

我遇到的问题类似于another posting中的问题,但是我不知道问题出在哪里。将应用程序部署到WildFly服务器时,出现java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS错误。

我的父dependencyManagement文件中有以下依赖项(在pom.xml部分中)。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.9</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-joda</artifactId>
    <version>2.9.9</version>
</dependency>
<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.2</version>
</dependency>

在子模块中,我具有相同的依赖项(在dependencies部分中),但是没有版本号(应从我的理解中继承)。

打包后,我的WEB-INF\lib文件夹包含预期的jackson-databind-2.9.9.jarjackson-datatype-joda-2.9.9.jarjoda-time-2.10.2.jar

但是,出现以下错误:

Caused by: java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS
    at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:35) [jackson-datatype-joda-2.9.9.jar:2.9.9]
    at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:26) [jackson-datatype-joda-2.9.9.jar:2.9.9]
    at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:40) [jackson-datatype-joda-2.9.9.jar:2.9.9]

看着那,看起来至少datatype最终以2.9.9结尾。因此,我唯一的猜测是databind不能正确进入2.9.9(并且正在解析为不存在WRITE_DURATIONS_AS_TIMESTAMPS的版本)。但是我不确定为什么它不能正常工作。

我猜想,WildFly可能会以某种方式覆盖databind的模块。我正在使用具有jackson-databind-2.4.1.jar的WildFly 8.2.1。我尝试使用关联的module.xml删除该JAR,但似乎无法解决任何问题。当然,我也删除了joda-time模块。但是,同样的问题仍然发生。

其他信息:这都是蚂蚁/常春藤到Maven行动的全部内容。常春藤中的某些原始依赖项具有force="true",并且存在<exclude org="joda-time" conf="runtime,default" />。但是,如果我了解Maven,那么如果您显式列出依赖项,则不需要强制,并且应该通过删除WildFly模块来排除该排除项。

0 个答案:

没有答案