Dapr - Quarkus 运行/构建错误 java.lang.ClassNotFoundException:javax.ws.rs.ext.MessageBodyReader

问题描述 投票:0回答:1

我正在尝试使用 Dapr & Quarkus & Gradle 基于 this 构建一个非常简单的 Pub/Sub 演示,但我遇到了这个错误:

[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

当 Quarkus 尝试启动或构建时。

这是我的 build.gradle 文件:

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.属性

#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";
    }

}

问题似乎与 io.quarkiverse.dapr:quarkus-dapr 导入有关,我不确定是否缺少另一个导入、配置或存在错误。

任何帮助将不胜感激:-)

java gradle quarkus publish-subscribe dapr
1个回答
0
投票

看来 io.quarkiverse.dapr:github 中的quarkus-dapr 示例已更新为可与 Quarkus 3+ 一起使用,但发布的最新版本适用于版本 2。

我看到的唯一解决方案是使用较旧的 Quarkus 版本或从 github 构建源代码。

© www.soinside.com 2019 - 2024. All rights reserved.