java - 从 java8 更改为 java 10 后的 NoClassDefFoundError
问题描述
我已经用谷歌搜索并搜索了我能做到的最好的,但我仍然找不到解决方案。也许我的搜索查询不正确或不详细。
我知道从 java 8 到 10 有许多 API 更改。8 到 10 的 jdk 结构也有重大变化。
问题:
我有以下依赖项:
项目 A --> 项目 B --> 项目 C
项目 A 中的某些类将调用项目 B 中的类,而 B 将调用 C。在 Java 8 中没有问题。
升级到 Java 10 后,出现 NoClassDefFoundError 异常。
我找到了两种解决问题的方法
项目 A 现在也依赖于项目 C
在 Java Build Path 选项卡 --> Order and Export 选项卡中,选中 Project C 复选框。
问题
有没有更好的方法来解决我的问题,而不是使用我找到的解决方案?因为我的项目代码很大,而且要花很多时间。
如果可能的话,我还想知道问题的根本原因。
代码:
ClassA.java(项目 A):
package pkg;
public class ClassA {
public ClassA() {
new ClassB();
}
public static void main(String[] args) {
new ClassA();
}
}
ClassB.java(项目 B)
package pkg;
public class ClassB {
public ClassB() {
callClassC();
}
public void callClassC() {
ClassC classC = new ClassC();
String info = classC.getInfo();
System.out.println(info);
}
}
ClassC.java(项目 C)
package pkg;
public class ClassC {
public String getInfo() {
return "Class c info";
}
}
我还为我的问题导出了一个 Eclipse 工作区。我使用旧版本的 eclipse 和 java 创建了这个工作区。
解决方案
我可以重现这个。代码可以编译,但执行时会出错。这是一个日食错误。
一种可能的解决方法:编辑运行配置,转到Dependencies
选项卡,使用Add variable string
值${project_classpath}
推荐阅读
- python-3.x - 在 pandas DataFrame 中加载一个逗号不均匀的文本文件
- angular - 路由到组件后未触发 Angular OnInit
- bash - 如何重命名该文件夹名称的文件名并将所有文件复制到一个文件夹中
- javascript - 使用 JavaScript 更新视频进度条
- mysql - MySQL百分比查询
- c - 在 fork 和(失败)exec 之后更改 C 文件指针
- snmp - 如何在我的 PEN 下注册 OID?
- reactjs - 使用 ReactJS 从本地存储加载后,配置文件图像不会显示
- django - 如何在同一页面上使用多个 django-markdownx 编辑器?
- for-loop - 开始一个 for 循环