NoClassDefFoundError после перехода с java8 на java 10 - PullRequest
0 голосов
/ 15 мая 2018

Я гуглил и искал лучшее, что мог, но все равно не мог найти решение.Возможно, мои поисковые запросы были неправильными или подробными.

Я знаю, что есть ряд изменений API с java 8 на 10. Структура jdk для 8-10 также имеет значительные изменения.

Проблема:

У меня есть следующие зависимости:
Проект A -> Проект B -> Проект C

Некоторые классы в проекте A будут вызывать классы в проектах B, а B будетвызов C. В Java 8 проблем не было.

После обновления до Java 10 возникает исключение NoClassDefFoundError.

Я нашел два пути решения проблемы

  1. Проект A теперь также зависит от проекта C

  2. На вкладке «Путь сборки Java» -> вкладка «Порядок и экспорт» поставлен флажок «Проект 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 (Project C)

package pkg;

public class ClassC {

    public String getInfo() {
        return "Class c info";
    }

}

Я также экспортировал рабочее пространство Eclipse для моей проблемы.Я создал это рабочее пространство, используя более старую версию eclipse и java.

1 Ответ

0 голосов
/ 16 мая 2018

Я могу воспроизвести это.Код компилируется, но вы получаете ошибку при выполнении.Это ошибка затмения.

Пожалуйста, сообщите об этом на https://bugs.eclipse.org.

Возможный обходной путь: Отредактируйте конфигурацию запуска, перейдите на вкладку Dependencies, используйте Add variable string со значением ${project_classpath}

...