javac (и другие исполняемые файлы jdk) создают NoClassDefFoundError - PullRequest
1 голос
/ 11 февраля 2010

В Solaris 10 я использую JDK 1.5.0_22, и когда я запускаю любой из исполняемых файлов JDK (javac, native2ascii, javadoc и т. Д.) В каталоге JDK / bin, для которого требуется tools.jar чтобы запустить, я получаю эту ошибку (запустить с аргументами и без):

Исключение в потоке "main" java.lang.NoClassDefFoundError: ком / ВС / инструменты / Javac / Main

Исполняемые файлы JRE в каталоге bin, для которых не требуется tools.jar, работают нормально (java, keytool и т. Д.).

Да, tools.jar находится в каталоге JDK / lib, с разрешениями все в порядке, и он не поврежден - я могу просматривать содержимое tools.jar и извлекать его.

Я попытался установить JAVA_HOME, и добавление каталога JDK / bin в PATH - установка / удаление этих переменных среды не имеет значения. Я все еще получаю ту же ошибку.

Это единственное, что я обнаружил, что он избавляется от NoClassDefFoundError и позволяет запускать исполняемый файл JDK / bin (см. Ниже, запускается из каталога JDK / bin):

./native2ascii -J-Xbootclasspath/a:../lib/tools.jar

Поэтому, если я добавлю -J-Xbootclasspath/a:../lib/tools.jar к любому исполняемому файлу JDK / bin, например javac, javadoc, native2ascii, они запустятся. В противном случае они не делают.

Есть идеи как исправить? Все исполняемые файлы JDK / bin работают нормально на других моих системах Solaris 10, и ни на одной из них не установлено ни JAVA_HOME vars, ни JDK / bin в PATH.

1 Ответ

0 голосов
/ 11 февраля 2010

Этот NoClassDefFoundError генерируется, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить определение класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения), а определение нет класс можно найти.

Определение класса для поиска существовало, когда выполняемый в данный момент класс был скомпилирован, но определение больше не может быть найдено.

JAVA_HOME не следует устанавливать в папку BIN. Он должен быть на один уровень выше: JDK_HOME = C: \ Program Files \ Java \ jdk1.6.0_18

...