【问题标题】:AWS SQS: java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonMerge?AWS SQS:java.lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge?
【发布时间】:2020-07-01 14:16:17
【问题描述】:

我正在尝试在我的 Java 代码中向 SQS 发送消息,如下所示:

public void pushToSQS(){

    String queueURL = "https://sqs.us-east-1.amazonaws.com/205135634997/myQueue.fifo";
    
    try {

        final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

        sqs.sendMessage(new SendMessageRequest(queueURL,
                "test message"));

    } catch (final AmazonServiceException e) {
        log.error("Error: " + e.getMessage());
    }
}

但是在线:final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

我得到错误:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonMerge
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonMerge

我在 pom.xml 中添加了以下内容:

<dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-models</artifactId>
            <version>1.11.86</version>
        </dependency>

下面是项目中所有的jackson依赖:

mvn 依赖树中我可以看到:

+- org.jboss.resteasy:resteasy-multipart-provider:jar:3.0.19.Final:provided
[INFO] |  +- org.jboss.resteasy:resteasy-client:jar:3.0.19.Final:provided
[INFO] |  +- org.jboss.resteasy:resteasy-jaxb-provider:jar:2.3.5.Final:provided
[INFO] |  |  \- com.sun.xml.bind:jaxb-impl:jar:2.2.5.jboss-1:provided
[INFO] |  |     +- com.sun.istack:istack-commons-runtime:jar:2.6.1:provided
[INFO] |  |     \- com.sun.xml.txw2:txw2:jar:20110809:provided
[INFO] |  +- com.sun.mail:javax.mail:jar:1.5.5:provided
[INFO] |  \- org.apache.james:apache-mime4j:jar:0.6:provided
[INFO] \- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.19.Final:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:provided
[INFO]    \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider: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.core:jackson-databind:jar:2.9.6:compile

是什么导致了这个错误?

【问题讨论】:

  • 你需要对 Jackson Annotation 库的依赖。
  • 好的,可以给mvn链接吗?
  • 我已经添加了,现在出现错误:java.lang.NoClassDefFoundError: org/apache/http/conn/SchemePortResolver
  • 看起来 aws-java-sdk-sqs 没有声明它需要的依赖项,或者您应该导入其他一些 Amazon 依赖项来获取这些依赖项。您可能想向亚马逊投诉。该错误本身表明您需要声明对 Apache HTTP 客户端的依赖。
  • 我怀疑您的本地设置有问题。添加上面的依赖,它添加了这些子依赖:aws-java-sdk-sqs-1.11.813.jar aws-java-sdk-core-1.11.813.jar commons-logging-1.1.3.jar httpclient-4.5。 9.jar httpcore-4.4.11.jar commons-codec-1.11.jar ion-java-1.0.2.jar jackson-databind-2.6.7.3.jar jackson-annotations-2.6.0.jar jackson-core-2.6。 7.jar jackson-dataformat-cbor-2.6.7.jar joda-time-2.8.1.jar jmespath-java-1.11.813.jar

标签: java amazon-web-services amazon-sqs noclassdeffounderror fasterxml


【解决方案1】:

看起来你有两次杰克逊。考虑一下:

+- org.jboss.resteasy:resteasy-multipart-provider:jar:3.0.19.Final:provided
[INFO] \- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.19.Final:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:provided
[INFO]    +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:provided
[INFO]    \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider: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.core:jackson-databind:jar:2.9.6:compile

请将顶级依赖项放到com.fasterxml.jackson.core:jackson-databind:jar:2.9.6,看看它是否有效。

【讨论】:

  • 顶级依赖是什么意思? pom.xml 中要改变什么?
  • 在你的 pom.xml 中寻找jackson-databind:jar:2.9.6。尝试删除它。如果这不起作用,请将版本替换为 2.6.3。
【解决方案2】:

我看到 jackson-databindjackson-annotations 有两个版本。 在 2.9.2+ 版本中,JsonMerge 在 jackson-annotations 中可用。

使用 maven 依赖树使用 mvn dependency:tree 查找并排除旧版本的 jackson-annotations 和 jackson:databind

【讨论】:

    【解决方案3】:

    根据错误,代码正在尝试加载 'com/fasterxml/jackson/annotation/JsonMerge' 这在 'jackson-annotations:jar:2.6.3' 中不可用。并且根据上面共享的 maven 依赖项,正在引用 Jackson 库的 2.6.3 版本。

    但是 2.9.6 版本中存在的必需类。所以建议使用2.9.6。建议在 2.9.6 版本中也使用 jackson-databind 和 jackson-core。

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2021-12-09
      • 2021-03-16
      • 2021-11-10
      • 2017-11-26
      • 2020-11-24
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多