首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置Quarkus将SPI实现加载到特定的ClassLoader中?

如何配置Quarkus将SPI实现加载到特定的ClassLoader中?
EN

Stack Overflow用户
提问于 2021-04-30 15:27:09
回答 1查看 659关注 0票数 0

我在部署Quarkus时遇到了一个问题,这个应用程序使用我们的部署系统注入的SPI实现。

在我们的pom中,我们指定了SPI接口(在它的静态初始化器中调用ServiceLoader.load(类))。在部署Quarkus应用程序时,我们分解QuarkusRunner jar,从清单中提取主类,并构造类似于"java -cp .QuarkusRunner“的命令行类路径包括quarkus中的所有内容-app/app、lib/boot和lib/main,以及我们打算使用的SPI实现。

当我们运行这个应用程序并尝试使用调用SPI ServiceLoader代码的代码时,我们会得到以下错误: java.util.ServiceConfigurationError::不是子类型。

我读到这是因为Quarkus使用的ClassLoader (它包含SPI-接口)和加载SPI-实现的ClassLoader都是不连接的(也就是说,彼此之间是隔离的)。

感兴趣的事物:

  • 我们使用Quarkus 1.13.2-决赛
  • 我试图使我们的SPI接口成为一个parentFirstArtifact (它没有依赖项),没有运气。
  • 查看QuarkusEntryPoint的代码,它似乎将放置在夸克/夸克应用程序中的所有类加载到Quarkus RunnerClassLoader中,夸库斯的父类是系统ClassLoader。我的假设是将类路径上的项添加到系统ClassLoader中。

问:在这一点上,我完全不知道实际发生了什么。如何使我的SPI实现与Quarkus一起工作?

EN

回答 1

Stack Overflow用户

发布于 2021-05-01 07:58:38

在使用Quarkus的fast-jar时,几乎所有东西都是通过RunnerClassLoader加载到JVM中的(例外是类加载器本身,以及少量的支持类和实用程序库)。

您将考虑的类路径(即用户代码、Quarkus生成或转换的代码和依赖项)在构建时构建的quarkus-application.dat文件中进行索引,不能修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67336542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档