首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型'com/fasterxml/jackson/datatype/jdk8/Jdk8Module‘(当前帧,stack[2])不能分配给’com//jackson/databind/Module‘

类型'com/fasterxml/jackson/datatype/jdk8/Jdk8Module‘(当前帧,stack[2])不能分配给’com//jackson/databind/Module‘
EN

Stack Overflow用户
提问于 2019-11-25 13:08:24
回答 1查看 5.7K关注 0票数 1

我将jackson库从2.5.4升级到2.10.1,如下所示,我收到以下错误:

代码语言:javascript
运行
复制
"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库排除在外应该相当简单:

代码语言:javascript
运行
复制
<?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部署结构中,而不是在根级执行排除操作:

代码语言:javascript
运行
复制
<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的一部分:

代码语言:javascript
运行
复制
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构建脚本,它依赖于上面的一个:

代码语言:javascript
运行
复制
dependencies {
   compile project(':components:firstJar')
}

使用JBoss EAP 7.0.5

我在运行gradle依赖项扫描时注意到的一件事是,在2.5.4版本的jackson库中,我的扫描如下所示:

代码语言:javascript
运行
复制
    +--- 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时,如下所示:

代码语言:javascript
运行
复制
|    +--- 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-06 12:32:41

最后,我需要将jacksonresteasy库排除在多个模块(jars)中,以及在resteasy中的根级。我为排除库而指定的模块使用导入库的模块(即在我的问题中我声明了A gradle build script of another jar that depends on the one above:)。

代码语言:javascript
运行
复制
<?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排除库。因此,对于其他有问题的人,我会有一个建议,那就是,为了让这件事发挥作用,你可以把库排除在哪一个罐子里。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59032599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档