我按照 this 指南尝试直接使用 Vertx 和 Router,但我无法检索 Router 的托管实例。
我只是这样做:
@QuarkusMainpublic
class Main {
public static void main(String... args) {
Quarkus.run(MyApp.class, args);
}
static class MyApp implements QuarkusApplication {
@Override
public int run(String... args) {
Router router = CDI.current().select(Router.class).get();
Quarkus.waitForExit();
return 0;
}
}
}
申请失败
CDI.current().select(Router.class).get();
和:
jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [interface io.vertx.ext.web.Router] and qualifiers [[]]
我的依赖如下:
dependencies {
implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"))
implementation("io.quarkus:quarkus-resteasy-reactive-jackson")
implementation("io.quarkus:quarkus-resteasy-reactive")
implementation("io.quarkus:quarkus-arc")
testImplementation("io.quarkus:quarkus-junit5")
testImplementation("io.rest-assured:rest-assured")
}
此时上下文还没有完全初始化吗? 有什么想法吗?
更新
按照评论中的建议,我尝试添加指南中的确切依赖项:
dependencies {
implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"))
implementation("io.quarkus:quarkus-arc")
implementation("io.vertx:vertx-web")
implementation("io.quarkus:quarkus-vertx-http")
testImplementation("io.quarkus:quarkus-junit5")
testImplementation("io.rest-assured:rest-assured")
}
但还是没有运气。
quarkus-vertx-http
之前就在类路径上并且是传递依赖,这就是为什么我没有专门添加它。
但是,不幸的是,这并没有解决问题。
您所指的指南是为 Quarkus 1.11 编写的。也许,您正在使用更新的版本,它会更积极地删除“未使用的”bean,请参阅此处。
您有两种选择如何获取
Router
:
@Inject
获取(这是Quarkus的标准)class MyApp implements QuarkusApplication {
@Inject
Router router;
@Override
public int run(String... args) {
router.get("/bye").handler(ctx -> {
ctx.end("Goodbye.");
Quarkus.asyncExit();
});
router.get().handler(ctx -> ctx.end("Hello from Quarkus!"));
Quarkus.waitForExit();
return 0;
}
}
Router
中设置来指示 Quarkus ARC 不要删除 application.properties
bean:quarkus.arc.unremovable-types=io.vertx.ext.web.Router