问题
I am trying to a message to SQS in my Java code as follows:
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());
}
}
However at line: final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
I get the error:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonMerge
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonMerge
I have added the following to my pom.xml:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-models</artifactId>
<version>1.11.86</version>
</dependency>
Below are all the jackson
dependencies in the project:
In mvn
dependency tree I can see:
+- 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
What is causing this error?
回答1:
Looks like you have jackson twice. Consider this:
+- 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
and this:
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.6:compile
Please drop the top level dependency to com.fasterxml.jackson.core:jackson-databind:jar:2.9.6
and see if it works.
回答2:
As per error, the code is trying to load 'com/fasterxml/jackson/annotation/JsonMerge' which is not available in 'jackson-annotations:jar:2.6.3'. And as per maven dependency shared above, version 2.6.3 of Jackson libraries are being referred. But the same class present in 2.9.6. So suggest to use 2.9.6. Recommend to use jackson-databind and jackson-core also with 2.9.6.
回答3:
I see there are two versions of jackson-databind and jackson-annotations. In version 2.9.2+ version JsonMerge is available in jackson-annotations.
Use maven dependency tree using mvn dependency:tree find and exclude the older versions of jackson-annotations and jackson:databind
来源:https://stackoverflow.com/questions/62678885/aws-sqs-java-lang-noclassdeffounderror-com-fasterxml-jackson-annotation-jsonme