从java8更改为Java10后出现NoClassDefFoundError

从java8更改为Java10后出现NoClassDefFoundError,java,eclipse,java-10,Java,Eclipse,Java 10,我在谷歌上搜索了尽可能多的信息,但仍然找不到解决方案。可能我的搜索查询不正确或不详细 我知道从Java8到Java10有很多API变化。jdk的结构对于8到10也有很大的变化 问题: 我有以下依赖项: 项目A-->项目B-->项目C 项目A中的一些类将调用项目B中的类,项目B中的一些类将调用C。在Java8中没有问题 升级到Java10后,出现NoClassDefFoundError异常 我找到了两种方法来克服这个问题 项目A现在也依赖于项目C 在Java构建路径选项卡-->顺序和导出选项卡中,

我在谷歌上搜索了尽可能多的信息,但仍然找不到解决方案。可能我的搜索查询不正确或不详细

我知道从Java8到Java10有很多API变化。jdk的结构对于8到10也有很大的变化

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

项目A中的一些类将调用项目B中的类,项目B中的一些类将调用C。在Java8中没有问题

升级到Java10后,出现NoClassDefFoundError异常

我找到了两种方法来克服这个问题

  • 项目A现在也依赖于项目C

  • 在Java构建路径选项卡-->顺序和导出选项卡中,选中项目C复选框

  • 问题:
  • 有没有更好的方法来解决我的问题,而不是使用我找到的解决方案?因为我的项目代码是巨大的,这将需要很多时间来做到这一点

  • 如果可能的话,我也想知道问题的根本原因

  • 代码: ClassA.java(项目A): java(项目B) java(项目C)
    我也为我的问题感到高兴。我使用旧版本的eclipse和java创建了这个工作区。

    我可以复制这个。代码可以编译,但执行时会出现错误。 这是一个eclipse错误

    请在报到处报到


    一个可能的解决方法是:编辑运行配置,转到
    依赖项
    选项卡,使用
    添加变量字符串
    ,其值为
    ${project\u classpath}

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

    请在报到处报到


    一个可能的解决方法是:编辑运行配置,转到
    依赖项
    选项卡,使用
    添加变量字符串
    ,值为
    ${project\u classpath}

    请发布一个;由于没有一个实际的例子来说明这个问题,因此很难找到答案。例如,问题可能是使用JAXB(默认情况下不再加载,并将在Java 11、iirc中删除),或者完全是其他问题。文章中有一个最小的代码示例,但请确保将每个类放在单独的项目中Eclipse项目与Java无关,无论您使用的是哪个Java版本。也许您忘了提到,您在迁移时也更改了Eclipse版本,正如您所描述的,这仅仅是一个Eclipse配置问题;由于没有一个实际的例子来说明这个问题,因此很难找到答案。例如,问题可能是使用JAXB(默认情况下不再加载,并将在Java 11、iirc中删除),或者完全是其他问题。文章中有一个最小的代码示例,但请确保将每个类放在单独的项目中Eclipse项目与Java无关,无论您使用的是哪个Java版本。也许您忘了提到,您在迁移时也更改了Eclipse版本,正如您所描述的,这仅仅是一个Eclipse配置问题。可能是我为此创建的副本。我为此创建的。
    package pkg;
    
    public class ClassA {
    
        public ClassA() {
            new ClassB();
        }
    
        public static void main(String[] args) {
            new ClassA();
        }
    }
    
    package pkg;
    
    public class ClassB {
    
        public ClassB() {
            callClassC();
        }
    
        public void callClassC() {
            ClassC classC = new ClassC();
    
            String info = classC.getInfo();
    
            System.out.println(info);
    
        }
    }
    
    package pkg;
    
    public class ClassC {
    
        public String getInfo() {
            return "Class c info";
        }
    
    }