Wildfly下加载Jackson JSR310的依赖冲突
Dependency conflict loading Jackson JSR310 under Wildfly
当我在 Wildfly 下使用 Jackson JSR310 模块解析 LocalDate
字段时,它失败并出现以下异常:
java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.hasToken(Lcom/fasterxml/jackson/core/JsonToken;)Z
我正在使用 wildfly-javaee7-with-tools
进行依赖管理。我的 pom.xml
:
有趣的部分
<properties>
<version.wildfly>10.0.0.Final</version.wildfly>
<version.jackson>2.6.3</version.jackson>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.bom</groupId>
<artifactId>wildfly-javaee7-with-tools</artifactId>
<version>${version.wildfly}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>${version.jackson}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${version.jackson}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${version.jackson}</version>
</dependency>
</dependencies>
我的供应商:
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public ObjectMapperProvider() {
this.objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());
objectMapper.registerModule(new JavaTimeModule());
objectMapper.registerModule(new Hibernate5Module());
}
@Override
public ObjectMapper getContext(Class<?> aClass) {
return objectMapper;
}
}
这显然看起来像是依赖冲突。然而,这是 mvn dependency:tree
的输出,与杰克逊相关的所有内容似乎都在 2.6.3
.
上
[INFO] +- javax:javaee-web-api:jar:7.0:provided
[INFO] +- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.14.Final:provided
[INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:compile
[INFO] | \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-prov ider:jar:2.6.3:provided
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.6.3:provided
[INFO] | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:provided
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-hibernate5:jar:2.6.3:compile
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.6.3:compile
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.6.3:compile
我也在 Wildfly 10.0.0.Final
服务器上 运行,所以我不希望 10.0.0.Final
pom.xml
和提供的实际依赖项之间的版本不匹配服务器。
检查此文件夹并检查版本。
wildfly-10.0.0.Final\modules\system\layers\base\com\fasterxml\jackson\core\jackson-core\main.
我很确定您需要自己指定 jackson-core 2.6.3 依赖项,因为 org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.14.Final
在提供的范围内,而 wildfly 10 中不存在 2.6.3。
当我在 Wildfly 下使用 Jackson JSR310 模块解析 LocalDate
字段时,它失败并出现以下异常:
java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.hasToken(Lcom/fasterxml/jackson/core/JsonToken;)Z
我正在使用 wildfly-javaee7-with-tools
进行依赖管理。我的 pom.xml
:
<properties>
<version.wildfly>10.0.0.Final</version.wildfly>
<version.jackson>2.6.3</version.jackson>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.bom</groupId>
<artifactId>wildfly-javaee7-with-tools</artifactId>
<version>${version.wildfly}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>${version.jackson}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${version.jackson}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${version.jackson}</version>
</dependency>
</dependencies>
我的供应商:
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
private final ObjectMapper objectMapper;
public ObjectMapperProvider() {
this.objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module());
objectMapper.registerModule(new JavaTimeModule());
objectMapper.registerModule(new Hibernate5Module());
}
@Override
public ObjectMapper getContext(Class<?> aClass) {
return objectMapper;
}
}
这显然看起来像是依赖冲突。然而,这是 mvn dependency:tree
的输出,与杰克逊相关的所有内容似乎都在 2.6.3
.
[INFO] +- javax:javaee-web-api:jar:7.0:provided
[INFO] +- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.14.Final:provided
[INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:compile
[INFO] | \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-prov ider:jar:2.6.3:provided
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.6.3:provided
[INFO] | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:provided
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-hibernate5:jar:2.6.3:compile
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.6.3:compile
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.6.3:compile
我也在 Wildfly 10.0.0.Final
服务器上 运行,所以我不希望 10.0.0.Final
pom.xml
和提供的实际依赖项之间的版本不匹配服务器。
检查此文件夹并检查版本。
wildfly-10.0.0.Final\modules\system\layers\base\com\fasterxml\jackson\core\jackson-core\main.
我很确定您需要自己指定 jackson-core 2.6.3 依赖项,因为 org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.14.Final
在提供的范围内,而 wildfly 10 中不存在 2.6.3。