首页 > 解决方案 > 从 java8 更改为 java 10 后的 NoClassDefFoundError

问题描述

我已经用谷歌搜索并搜索了我能做到的最好的,但我仍然找不到解决方案。也许我的搜索查询不正确或不详细。

我知道从 java 8 到 10 有许多 API 更改。8 到 10 的 jdk 结构也有重大变化。

问题:

我有以下依赖项:
项目 A --> 项目 B --> 项目 C

项目 A 中的某些类将调用项目 B 中的类,而 B 将调用 C。在 Java 8 中没有问题。

升级到 Java 10 后,出现 NoClassDefFoundError 异常。

我找到了两种解决问题的方法

  1. 项目 A 现在也依赖于项目 C

  2. 在 Java Build Path 选项卡 --> Order and Export 选项卡中,选中 Project C 复选框。

问题

  1. 有没有更好的方法来解决我的问题,而不是使用我找到的解决方案?因为我的项目代码很大,而且要花很多时间。

  2. 如果可能的话,我还想知道问题的根本原因。

代码:

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 创建了这个工作区。

标签: javaeclipsejava-10

解决方案


我可以重现这个。代码可以编译,但执行时会出错。这是一个日食错误。

请在https://bugs.eclipse.org报告。

一种可能的解决方法:编辑运行配置,转到Dependencies选项卡,使用Add variable string${project_classpath}


推荐阅读