我将jackson库从2.5.4升级到2.10.1,如下所示,我收到以下错误:
"WFLYCTL0080: Failed services" => {
"jboss.deployment.subunit.\"m2m-rt.ear\".\"app.jar\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.subunit.\"app.ear\".\"app.jar\".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of subdeployment \"app.jar\" of deployment \"app.ear\"
Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class Class with ClassLoader ModuleClassLoader for Module \"deployment.app.jar:main\" from Service Module Loader
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
Class.<init>()V @19: invokevirtual
Reason:
Type 'com/fasterxml/jackson/datatype/jdk8/Jdk8Module' (current frame, stack[2]) is not assignable to 'com/fasterxml/jackson/databind/Module'
通过我自己的研究,我发现将JBos-Deployment-structure.xml中的jackson库排除在外应该相当简单:
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<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>
<dependencies>
<module name="org.picketbox"/>
<module name="org.wildfly.clustering.singleton"/>
<module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import"/>
<module name="org.apache.cxf.impl" export="true">
<imports>
<include path="META-INF" />
<include path="META-INF/cxf" />
<include path="META-INF/services" />
</imports>
</module>
</dependencies>
</deployment>
<sub-deployment name="other.jar">
<dependencies>
<module name="org.infinispan" slot="5.2"/>
</dependencies>
</sub-deployment>
</jboss-deployment-structure>
我还尝试将其包含在jboss部署结构中,而不是在根级执行排除操作:
<sub-deployment name="firstJar.jar">
<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>
</sub-deployment>
下面是我如何在我的gradle构建脚本中定义我的jackson库。这些库是jar的一部分,jar与其他几个jar一起部署,并将war部署到ear中。其他四个jar模块依赖于包含jackson库的jar。
我的firstJar的一部分:
compile 'com.fasterxml.jackson.core:jackson-core:2.10.1'
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1'
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1'
compile 'com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1'
另一个jar的gradle构建脚本,它依赖于上面的一个:
dependencies {
compile project(':components:firstJar')
}
使用JBoss EAP 7.0.5
我在运行gradle依赖项扫描时注意到的一件事是,在2.5.4版本的jackson库中,我的扫描如下所示:
+--- com.fasterxml.jackson.core:jackson-core:2.5.4
| +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.5.4
| | +--- com.fasterxml.jackson.core:jackson-core:2.5.4
| | \--- com.fasterxml.jackson.core:jackson-databind:2.5.4
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.5.0
| | \--- com.fasterxml.jackson.core:jackson-core:2.5.4
| +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.5.4
| | +--- com.fasterxml.jackson.core:jackson-core:2.5.4
| | \--- com.fasterxml.jackson.core:jackson-databind:2.5.4 (*)
| \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.5.4
| +--- com.fasterxml.jackson.core:jackson-core:2.5.4
| \--- com.fasterxml.jackson.core:jackson-databind:2.5.4 (*)
当我运行2.10.1时,如下所示:
| +--- com.fasterxml.jackson.core:jackson-core:2.5.4 -> 2.10.1
| +--- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1
| | +--- com.fasterxml.jackson.core:jackson-core:2.10.1
| | \--- com.fasterxml.jackson.core:jackson-databind:2.10.1
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.10.1
| | \--- com.fasterxml.jackson.core:jackson-core:2.10.1
| +--- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.10.1
| | +--- com.fasterxml.jackson.core:jackson-core:2.10.1
| | \--- com.fasterxml.jackson.core:jackson-databind:2.10.1 (*)
| \--- com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1
| +--- com.fasterxml.jackson.core:jackson-core:2.10.1
| \--- com.fasterxml.jackson.core:jackson-databind:2.10.1 (*)
我注意到2.10.1有一个额外的jackson-annotations
依赖项。因此,我尝试在我的gradle脚本中为jackson-datatype-jsr310
库添加jackson-datatype-jsr310
,这确实从依赖项扫描中删除了它。但我仍然有同样的错误。我也想知道为什么在第一行的依赖扫描为2.10.1,它说的2.5.4 -> 2.10.1
。
发布于 2020-02-06 12:32:41
最后,我需要将jackson
和resteasy
库排除在多个模块(jars)中,以及在resteasy
中的根级。我为排除库而指定的模块使用导入库的模块(即在我的问题中我声明了A gradle build script of another jar that depends on the one above:
)。
<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<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>
<dependencies>
<module name="org.picketbox"/>
<module name="org.wildfly.clustering.singleton"/>
<module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import"/>
<module name="org.apache.cxf.impl" export="true">
<imports>
<include path="META-INF" />
<include path="META-INF/cxf" />
<include path="META-INF/services" />
</imports>
</module>
</dependencies>
</deployment>
<sub-deployment name="moduleThatDependsOnFirst.jar">
<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>
</sub-deployment>
<sub-deployment name="anotherModuleThatDependsOnFirst.jar">
<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>
</sub-deployment>
</jboss-deployment-structure>
我不明白的一件事是,为什么我不需要为其他使用导入库的模块的jars排除库。因此,对于其他有问题的人,我会有一个建议,那就是,为了让这件事发挥作用,你可以把库排除在哪一个罐子里。
https://stackoverflow.com/questions/59032599
复制相似问题