首页 > 解决方案 > Eclipse 插件中的 com.google.protobuf.ExtensionRegistryLite ClassNotFoundException

问题描述

我正在尝试在 Eclipse 插件中以编程方式编译和加载 protobuf 代码,但由于某种原因,它给了我这个错误:

java.lang.NoClassDefFoundError: com/google/protobuf/ExtensionRegistryLite
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)

我知道我已经正确设置了依赖项,因为我能够导入 ExtensionRegistroyLite 并使用它。此外,当我将此代码作为 Java 应用程序运行时,它也可以正常工作。这是我编译和加载类的方式:

compiler.run(null, null, null, "-d", "path/to/dir, "-classpath", "protobuf-java-3.11.4.jar", "myProtoClass.java")

URL url = protoDir.toUri().toURL();         
URL[] urls = new URL[]{url};

// load compiled class
ClassLoader cl = new URLClassLoader(urls);

// create object of compiled class
Class<?> cls = Class.forName(fullMessageName, true, cl); // Crashes at this line

如果我在错误中进一步向下滚动,它会显示:

Caused by: java.lang.ClassNotFoundException: com.google.protobuf.ExtensionRegistryLite
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

任何可能导致这种情况的提示将不胜感激!

标签: javaeclipseeclipse-plugineclipse-rcp

解决方案


推荐阅读