I'm building a scala application and trying to use the avro4s library with KafkaAvroDeserializer but instantiating the class leads to java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonNode.
The only place I see it being used is: avro-converter/src/main/java/io/confluent/connect/avro/AvroData.java
I haven't written much java, but I don't see any dependency in pom.xml file for avro-converter and the codehaus jackson repository seems really old.
A minimal example:
build.sbt
scalaVersion := "2.13.1"
name := "hello-world"
organization := "ch.epfl.scala"
version := "1.0"
libraryDependencies ++= Seq(
"com.sksamuel.avro4s" %% "avro4s-core" % "3.0.1",
"io.confluent" % "kafka-avro-serializer" % "5.0.1",
)
resolvers += "Confluent Maven Repository" at "https://packages.confluent.io/maven/"
Main.scala
import io.confluent.kafka.serializers.KafkaAvroDeserializer
object Main extends App {
val kafkaAvroDeserializer = new KafkaAvroDeserializer
}
Runtime Error
[error] java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonNode
[error] at Main$.delayedEndpoint$Main$1(Main.scala:4)
[error] at Main$delayedInit$body.apply(Main.scala:3)
[error] at scala.Function0.apply$mcV$sp(Function0.scala:39)
[error] at scala.Function0.apply$mcV$sp$(Function0.scala:39)
[error] at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
[error] at scala.App.$anonfun$main$1$adapted(App.scala:80)
[error] at scala.collection.immutable.List.foreach(List.scala:392)
[error] at scala.App.main(App.scala:80)
[error] at scala.App.main$(App.scala:78)
[error] at Main$.main(Main.scala:3)
[error] at Main.main(Main.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
[error] Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.JsonNode
[error] at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[error] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[error] at Main$.delayedEndpoint$Main$1(Main.scala:4)
[error] at Main$delayedInit$body.apply(Main.scala:3)
[error] at scala.Function0.apply$mcV$sp(Function0.scala:39)
[error] at scala.Function0.apply$mcV$sp$(Function0.scala:39)
[error] at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
[error] at scala.App.$anonfun$main$1$adapted(App.scala:80)
[error] at scala.collection.immutable.List.foreach(List.scala:392)
[error] at scala.App.main(App.scala:80)
[error] at scala.App.main$(App.scala:78)
[error] at Main$.main(Main.scala:3)
[error] at Main.main(Main.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
```
@ikilledthecat Are you able to use kafka-avro-serializer 5.3.0 instead? That fixed the issue for me.
Yes updating to version 5.3 solved it. Thanks @giarc3
Most helpful comment
@ikilledthecat Are you able to use kafka-avro-serializer 5.3.0 instead? That fixed the issue for me.