【发布时间】:2021-08-20 18:37:32
【问题描述】:
ClassLoader classLoader = QuarkusClassLoader.getSystemClassLoader();
String str = "com.mycompany.service.SomeClass";
try {
Class<? extends SomeClass> someClass =
(Class<? extends SomeClass>) classLoader.loadClass(str);
} catch (Throwable e) {
e.printStackTrace();
}
我试图弄清楚为什么当我尝试加载com.mycompany.service.SomeClass 时会得到java.lang.ClassNotFoundException。此类是在项目中本地定义的,当我启动我的 Quarkus 应用程序时出现此错误(mvn compile quarkus:dev)。如果我使用另一个类加载器(即 this.getClass().getClassLoader()),则不会发生此错误。似乎它只发生在 QuarkusClassLoader 上
编辑: 我认为最终问题与 Debezium Engine 初始化有关。调用以下行时引发了该异常:
// Create the engine with this configuration ...
engine =
DebeziumEngine.create(Json.class)
.using(props)
.notifying(this::handleDbChangeEvent)
.build();
查看我的回答,了解我是如何解决的
【问题讨论】:
-
您可以尝试使用
Thread.currentThread().getContextClassLoader()作为类加载器吗? -
是的,它可以工作,但我试图弄清楚为什么 QuarkusClassLoader 不能。主要是因为调用它的地方不是我拥有的代码,我只是设法以这种方式重现该错误
标签: java classloader quarkus debezium