smallrye / smallrye-reactive-messaging

SmallRye Reactive Messaging
http://www.smallrye.io/smallrye-reactive-messaging/
Apache License 2.0
233 stars 174 forks source link

java.lang.ClassNotFoundException for `AbstractKafkaSchemaSerDe` when using confluent kafka avro serializer #821

Closed chris-aeviator closed 3 years ago

chris-aeviator commented 3 years ago

Build step io.quarkus.kafka.client.deployment.KafkaProcessor#build threw an exception: java.lang.NoClassDefFoundError: io/confluent/kafka/serializers/AbstractKafkaSchemaSerDe

Caused by: java.lang.ClassNotFoundException: io.confluent.kafka.serializers.AbstractKafkaSchemaSerDe at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:406) at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:363) ... 25 more

I installed io.kafka.serializers via manual download and

❯ mvn install:install-file \
  -Dfile=kafka-avro-serializer-5.5.1.jar\
  -DgroupId=io.confluent\
  -DartifactId=kafka-avro-serializer\
  -Dversion=5.5.1\
  -Dpackaging=jar\
  -DgeneratePom=true\

I've setup my quarkus appplication with the corresponding config

mp.messaging.connector.smallrye-kafka.schema.registry.url=http://localhost:8081/

mp.messaging.incoming.projectInfo.connector=smallrye-kafka
mp.messaging.incoming.projectInfo.topic=projectInfo
mp.messaging.incoming.projectInfo.value.deserializer=io.confluent.kafka.serializers.KafkaAvroDeserializer
mp.messaging.incoming.projectInfo.schema.registry.url=http://localhost:8081/
mp.messaging.incoming.projectInfo.specific.avro.reader=true

mp.messaging.outgoing.projectsCanBeStarted.connector=smallrye-kafka
mp.messaging.outgoing.projectsCanBeStarted.topic=projectCanBeStarted
mp.messaging.outgoing.projectsCanBeStarted.value.serializer=io.confluent.kafka.serializers.KafkaAvroSerializer
mp.messaging.outgoing.projectsCanBeStarted.schema.registry.url=http://localhost:8081/

I've loaded

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-reactive-messaging-kafka</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-avro</artifactId>
    </dependency>
    <dependency>
      <groupId>io.confluent</groupId>
      <artifactId>kafka-avro-serializer</artifactId>
      <version>5.5.1</version>
    </dependency>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro-maven-plugin</artifactId>
        <version>1.10.0</version>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals>
              <goal>schema</goal>
            </goals>
            <configuration>
              <sourceDirectory>src/main/avro/</sourceDirectory>
              <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
              <stringType>String</stringType>
            </configuration>
          </execution>
        </executions>
      </plugin>

btw I'm running a kogito project if that info is of any value

chris-aeviator commented 3 years ago

can successfully compile when using

    <dependency>
    <groupId>io.confluent</groupId>
    <artifactId>kafka-avro-serializer</artifactId>
    <version>5.3.2</version>
    </dependency>
cescoffier commented 3 years ago

@chris-aeviator Are we missing this information in the documentation? Also if I'm not mistaken this artifact is NOT available from Maven central and you need a specific repository.

chris-aeviator commented 3 years ago

@cescoffier yes I've done that see my comment

I installed io.kafka.serializers via manual download and…

however, when adding the repository to pom.xml and specifying 5.3.2 it worked