Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Osgi环境中的NoClassDefFoundError_Osgi_Apache Kafka_Karaf_Debezium - Fatal编程技术网

Osgi环境中的NoClassDefFoundError

Osgi环境中的NoClassDefFoundError,osgi,apache-kafka,karaf,debezium,Osgi,Apache Kafka,Karaf,Debezium,我正在ApacheKaraf上与osgi合作,并尝试使用kafka和debezium运行到osgi环境中 卡夫卡和DeBuZIE不是 OSGi准备< /St>(KARF不会把它们看作捆绑),所以我用Eclipse“插件项目”对它们进行了放大。我osgified给他们的JAR如下:debezium embedded、debezium core、kafka connect api、kafka connect运行时 一开始,当我尝试运行debezium时,我会遇到很多“类未发现异常” 为了解决这个问

我正在ApacheKaraf上与osgi合作,并尝试使用kafka和debezium运行到osgi环境中

卡夫卡和DeBuZIE不是<强> OSGi准备< /St>(KARF不会把它们看作捆绑),所以我用Eclipse“插件项目”对它们进行了放大。我osgified给他们的JAR如下:debezium embedded、debezium core、kafka connect api、kafka connect运行时

一开始,当我尝试运行debezium时,我会遇到很多“类未发现异常”

为了解决这个问题,我更改了两个bundle的清单。我向调用者添加了一个导入包,向被调用的bundle添加了一个导出包。使用它,我可以解决classNotFound问题

解决了所有classNotfound问题后,我得到了NoClassDefFoundError

NoClassDefFoundError表示类装入器在尝试装入.class时找不到该类。。。但我确实导入了所有的软件包,并将其导出

如何在osgi环境中处理NoClassDefFoundError

[编辑添加的代码]

这是班长:

public class Monitor {
    private Consumer<SourceRecord> consumer = new Consumer<SourceRecord>() {

        public void accept(SourceRecord t) {
            System.out.println("Change Detected !");
        }

    };

    public void connect() {

        System.out.println("Engine Starting");
        Configuration config = Configuration.create()
                /* begin engine properties */
                .with("connector.class", "io.debezium.connector.mysql.MySqlConnector")
                .with("offset.storage", "org.apache.kafka.connect.storage.FileOffsetBackingStore")
                .with("offset.storage.file.filename", "d:/pathTooffset.dat")
                .with("offset.flush.interval.ms", 60000)
                /* begin connector properties */
                .with("name", "my-sql-connector").with("database.hostname", "localhost").with("database.port", 3306)
                .with("database.user", "root").with("database.password", "apassword").with("server.id", 10692)
                .with("database.server.name", "localhost")
                .with("database.history", "io.debezium.relational.history.FileDatabaseHistory")
                .with("database.history.file.filename", "d:/pathTOdbhistory.dat")
                .build();
        try {
            // Create the engine with this configuration ...
            EmbeddedEngine engine = EmbeddedEngine.create().using(config).notifying(consumer).build();
            Executor executor = Executors.newFixedThreadPool(1);

            executor.execute(() -> {
                engine.run();
            });
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

问题一定在里面。该错误无法初始化类意味着该类的某些静态初始化无法工作。看这个相关的问题


我建议在调试模式下运行karaf,并通过初始化此类进行调试。

如果使用错误的类加载器,可能会发生错误。看起来异常发生在类监视器中。你能发布相关内容吗?@ChristianSchneider我添加了代码above@ChristianSchneider当我将上面的代码作为一个独立的jar运行时,它是有效的,但是当我试图在osgi karafThanks上运行它以获得答案时,会出现错误,但是您能回答这些问题吗?为什么静态初始化错误只在karaf上运行时发生,而在java独立应用程序上运行时没有发生?这是否意味着debezium与osgi环境不兼容?是的。我认为debezium目前与OSGi不兼容。我猜他们对类加载的假设在OSGi中不起作用。我认为你应该在他们的问题跟踪器中打开一个关于这个问题的问题。Debezium JAR没有OSGi清单,因为IIRC也没有我们的第三方库依赖项有它们。可以自由地记录一个问题,以将OSGi清单添加到JAR中,尽管您可能想考虑通过拉请求来帮助更改,以加快进度。
public class Activator implements BundleActivator {

public void start(BundleContext context) throws Exception {
    Monitor monitor = new Monitor();
    monitor.connect();
}

public void stop(BundleContext context) throws Exception {
}}