Причина неизвестного конфликта: java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS - PullRequest
0 голосов
/ 26 июня 2019

У меня проблема, похожая на ту, что есть в другой публикации , но я не могу понять, где моя проблема. При развертывании приложения на сервере 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.jar, jackson-datatype-joda-2.9.9.jar и joda-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 своими модулями. Я использую WildFly 8.2.1, который имеет jackson-databind-2.4.1.jar. Я попытался удалить этот JAR с соответствующим module.xml, но это, похоже, ничего не решило. Я также удалил модуль joda-time, чтобы быть уверенным. Но та же самая проблема все еще случается.

Дополнительная информация: Это часть большого движения Муравья / Плюща в Мавен. Некоторые из исходных зависимостей в Ivy имели force="true", а <exclude org="joda-time" conf="runtime,default" />. Тем не менее, если я понимаю Maven, то сила не понадобится, если вы явно перечислите зависимость, и это исключение должно быть удалено путем удаления модулей WildFly.

...