java - 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)
任何可能导致这种情况的提示将不胜感激!
解决方案
推荐阅读
- mysql - 续集:JSON_EXTRACT 中的双倍 $ 问题
- javascript - 如何生成每行有 3 列的表
- webpack - 使用 webpack 将 JSON 变量从分层文件导入 SASS
- flutter - 如何比较来自 response.body 的数据
- c++ - 当作为与结构相同类型的参数传递时,包装在 C++ 类中的 C 结构如何交互?
- python - Github 会在文件更改时收到通知?
- sql - SQL Server - 将多行中的列显示为单行
- c# - 在 Azure Web App 上设置应用程序以使用 Tls1.2
- javascript - 巴比伦对象不执行
- dataframe - 如何在 for 循环中附加 pyspark 数据帧?