从JBoss 7中排除提供的杰克逊版本EAP
我正尝试使用JBoss 7 EAP提供的更新版本的Jackson。为了解决我的问题,我创建了一个包含在我的战争部署中的jboss-deployment-structure.xml文件。从JBoss 7中排除提供的杰克逊版本EAP
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<!--<module name="com.fasterxml.jackson.core.jackson-core" slot="main" />-->
<!--<module name="com.fasterxml.jackson.core.jackson-annotations" slot="main" />-->
<module name="com.fasterxml.jackson.core.jackson-databind" slot="main" />
</exclusions>
</deployment>
</jboss-deployment-structure>
但似乎JBoss使用交付的模块,而不是提供的依赖项。
ModuleClassLoader的模块 “com.fasterxml.jackson.core.jackson-数据绑定:主” 从本地模块 装载机@ 134593bf(取景器:本地模块取景器@ 4bb4de6a(根: ... \ jboss- EAP-7.0 \模块,... \ jboss的-EAP-7.0 \模块\ SYSTEM \层\基地))
我发现了一个类似的问题JBoss 7 Classloader -- Exclude Module Implementation但它并没有帮助我。
我错过了什么?
我跑进杰克逊的确切同样的问题,我在我的EAP 7到工作中使用该jboss-deployment-structure.xml
:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-core" />
<module name="com.fasterxml.jackson.core.jackson-annotations" />
<module name="com.fasterxml.jackson.core.jackson-databind" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
<module name="org.jboss.resteasy.resteasy-jackson2-provider" />
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
</exclusions>
</deployment>
</jboss-deployment-structure>
它看起来像只要任何其他模块列表杰克逊自己依赖于它们各自的module.xml
,它只是简单地不被排除,并且EAP不能被放弃甚至对它发出警告。
编辑2018-02-19:从EAP 7.0.0升级到7.1.0时,由于更新的杰克逊瓶子,事情再次爆发。
这是堆栈跟踪的关键部分:
Caused by: javax.ejb.EJBException: WFLYEJB0442: Unexpected Error
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:185)
[...]
at org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:161) [wildfly-ee-7.1.0.GA-redhat-11.jar:7.1.0.GA-redhat-11]
... 11 more
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
[...]()Lcom/fasterxml/jackson/databind/ObjectMapper; @89: invokevirtual
Reason:
Type 'com/fasterxml/jackson/datatype/jdk8/Jdk8Module' (current frame, stack[1]) is not assignable to 'com/fasterxml/jackson/databind/Module'
所以我们排除那些还有:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="com.fasterxml.jackson.core.jackson-core" />
<module name="com.fasterxml.jackson.core.jackson-annotations" />
<module name="com.fasterxml.jackson.core.jackson-databind" />
<module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8" />
<module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310" />
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
<module name="org.jboss.resteasy.resteasy-jackson2-provider" />
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
</exclusions>
</deployment>
</jboss-deployment-structure>
它看起来像从JBoss的EAP 7 JAX-RS子模块使用了杰克逊。只要你跳过此子模块,你将摆脱的JBoss的杰克逊版本:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="jaxrs"/>
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
(只有当你不使用JAXRS ;-)有道理
嗯,我们做。只是我们也明确地使用了杰克逊。 : - / – Antares42
是部署的耳朵? – ctomc
由于其他杰克逊模块依赖于该模块,因此您需要谨慎操作。是否有你需要更新版本的理由? –
我们需要Apache Camel。 – CSchulz