Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将QuarkusClassLoader与本地类和Debezium引擎一起使用时发生ClassNotFoundException_Java_Classloader_Quarkus_Debezium - Fatal编程技术网

Java 将QuarkusClassLoader与本地类和Debezium引擎一起使用时发生ClassNotFoundException

Java 将QuarkusClassLoader与本地类和Debezium引擎一起使用时发生ClassNotFoundException,java,classloader,quarkus,debezium,Java,Classloader,Quarkus,Debezium,请参阅我的答案,了解我如何使用类加载器修复它。getSystemClassLoader肯定不是正确的做法,因为在开发模式下(更一般地说,您很少希望在Java代码中这样做),Quarkus不是一个扁平的类加载器结构,而是一个分层的类加载器结构 有关在开发模式下如何进行类加载的更多详细信息,请参阅 您可以使用以下方法强制jar的所有类由系统类加载器而不是Quarkus类加载器加载: quarkus.class loading.parent first artifacts=stax:stax api

请参阅我的答案,了解我如何使用
类加载器修复它。getSystemClassLoader
肯定不是正确的做法,因为在开发模式下(更一般地说,您很少希望在Java代码中这样做),Quarkus不是一个扁平的类加载器结构,而是一个分层的类加载器结构

有关在开发模式下如何进行类加载的更多详细信息,请参阅

您可以使用以下方法强制jar的所有类由系统类加载器而不是Quarkus类加载器加载:

quarkus.class loading.parent first artifacts=stax:stax api


在这里,您基本上配置了应该由系统类加载器加载的jar的groupId和artifactId

我通过在引擎初始化中传递
Thread.currentThread().getContextClassLoader()
解决了这个问题

// Create the engine with this configuration ...
engine =
    DebeziumEngine.create(Json.class)
        .using(props)
        .notifying(this::handleDbChangeEvent)
        .build();

您可以尝试使用
Thread.currentThread().getContextClassLoader()
作为类加载器吗?是的,使用该类加载器可以工作,但我正在尝试找出为什么QuarkusClassLoader不能工作。主要是因为调用它的地方并不是我自己的代码,我只是设法以这种方式重现了那个错误,恐怕我真的不明白这意味着什么。有没有办法强制类在开发模式下可用?请参阅我的更新答案谢谢你的更新答案,不幸的是,这也不起作用(我尝试了另一个groupId:artifactId)。看看我的答案是什么
// Create the engine with this configuration ...
engine =
    DebeziumEngine.create(Json.class)
        .using(props)
        .notifying(this::handleDbChangeEvent)
        .build();
engine =
    DebeziumEngine.create(Json.class)
        // Have to pass the current class loader to avoid ClassNotFoundException
        .using(Thread.currentThread().getContextClassLoader())
        .using(props)
        .notifying(this::handleDbChangeEvent)
        .build();