I'm trying to build a very simple Pub/Sub demo based on this using Dapr & Quarkus & Gradle and I'm facing this error:
[error]: Build step io.quarkiverse.dapr.deployment.DaprProcessor#vertxProviders threw an exception: java.lang.NoClassDefFoundError: javax/ws/rs/ext/MessageBodyReader
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:506)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
at io.quarkiverse.dapr.deployment.DaprProcessor.vertxProviders(DaprProcessor.java:115)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1512)
at java.base/java.lang.Thread.run(Thread.java:833)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.ext.MessageBodyReader
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:516)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
... 14 more
when Quarkus tries to start or build.
This is my build.gradle file:
plugins {
id 'java'
id 'io.quarkus'
}
wrapper{
gradleVersion = '7.6'
distributionUrl = distributionUrl.replace("bin", "all")
}
group 'com.test'
version '1.0.0-SNAPSHOT'
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
implementation 'io.dapr:dapr-sdk:1.9.0'
implementation 'io.dapr:dapr-sdk-actors:1.9.0'
implementation 'io.quarkiverse.dapr:quarkus-dapr:1.0.4'
implementation 'io.quarkus:quarkus-resteasy-reactive-jackson'
implementation 'io.quarkus:quarkus-arc'
// implementation 'io.quarkus:quarkus-resteasy-reactive'
// implementation 'io.quarkus:quarkus-rest-client-reactive-jackson'
compileOnly 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
testCompileOnly 'org.projectlombok:lombok:1.18.28'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.28'
testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
compileJava {
options.encoding = 'UTF-8'
options.compilerArgs << '-parameters'
}
test {
systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
compileTestJava {
options.encoding = 'UTF-8'
}
gradle.properties
#Gradle properties
quarkusPluginId=io.quarkus
quarkusPluginVersion=3.3.0
quarkusPlatformGroupId=io.quarkus.platform
quarkusPlatformArtifactId=quarkus-bom
quarkusPlatformVersion=3.3.0
PubsubResource.java
package io.quarkiverse.dapr.demo;
import java.util.concurrent.atomic.AtomicInteger;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import io.dapr.Topic;
import io.dapr.client.domain.CloudEvent;
import io.quarkiverse.dapr.core.SyncDaprClient;
@Path("/pubsub")
@ApplicationScoped
public class PubsubResource {
private final AtomicInteger counter = new AtomicInteger(1);
@Inject
SyncDaprClient dapr;
@GET
public String hello() {
return "Hello, this is quarkus-dapr demo app1";
}
@GET
@Path("/trigger/topic1")
public String triggerSendEvent2Topic1() {
int content = counter.getAndIncrement();
dapr.publishEvent("topic1", content);
System.out.println("App1 succeeds to send event to topic1 with content=" + content);
return "App1 succeeds to send event to topic1 with content=" + content;
}
@POST
@Path("/topic2")
@Topic(name = "topic2")
public String eventOnTopic2(String content) {
System.out.println("App1 received event from topic2: content=" + content);
return "App1 received event from topic2";
}
@POST
@Path("/topic3")
@Topic(name = "topic3")
public String eventOnTopic3(CloudEvent<String> event) {
String content = event.getData();
System.out.println("App1 received event from topic3: content=" + content);
return "App1 received event from topic3";
}
@POST
@Path("/topic4")
@Topic(name = "topic4")
public String eventOnTopic4(CloudEvent<TestData> event) {
TestData testData = event.getData();
String content = testData.getContent();
System.out.println("App1 received event from topic4: content=" + content);
return "App1 received event from topic4";
}
}
The issue seems to be with the io.quarkiverse.dapr:quarkus-dapr import and I'm not sure if I'm missing another import, a configuration or there is a bug with it.
Any help will be appreciated :-)