Eclipse не будет компилироваться, файл плохого класса, неправильная версия

Я пытаюсь скомпилировать код, извлеченный из SVN от другого разработчика. В последнее время Eclipse доставлял мне немало хлопот.

Вот мои настройки для конкретного проекта: alt text

Это раздел компиляции моего файла ant:

<target name="compile" depends="build-common, init" description="Compile files. ">
    <javac srcdir="${src_dir}" destdir="${build_dir}" debug="true" >
        <classpath path="${tomcat_home}/lib/servlet-api.jar;" />
    </javac>
</target>

Когда я компилирую (используя Ant), я получаю сообщение об ошибке:

compile:
    [javac] Compiling 3 source files to H:\MYCOMPANY\portlets\build
    [javac] H:\MYCOMPANY\portlets\src\com\mycompany\portlets\CourseList.java:3: cannot access java.io.IOException
    [javac] bad class file: C:\Program Files\Java\jre1.6.0_07\lib\rt.jar(java/io/IOException.class)
    [javac] class file has wrong version 49.0, should be 48.0
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath.
    [javac] import java.io.IOException;
    [javac]                ^
    [javac] 1 error

Что означает эта ошибка?

7
задан jeph perro 23 August 2010 в 22:00
поделиться

5 ответов

Файл класса версии 49.0 относится к Java 1.5.x, тогда как файл класса 48.0 относится к версии Java 1.4.x. Структура classfile была изменена в версии 1.5 из-за введения нескольких новых функций и изменений, внесенных в спецификацию языка Java.

Из ошибки можно сделать вывод, что ожидался файл класса Java 1.4, а был найден файл класса Java 1.5. Похоже, что компилятор является компилятором Java 1.4, поэтому вам следует попытаться проверить, используете ли вы правильную версию компилятора Java, а также правильный JDK (т.е. домашний JDK).

ДОПОЛНЕНИЕ

Муравей обычно ищет исполняемый файл javac в каталоге $JAVA_HOME/bin/javac . Если переменная окружения JAVA_HOME была задана неправильно, скажем на домашнюю Java 1.4, то есть вероятность получить описанную ошибку даже в Eclipse.

ДОБАВЛЕНИЕ #2

Добавление записей в переменную окружения PATH может привести к изменению поведения поискового пути к классам Ant, что может привести к использованию другого tools.jar для целей компиляции источники. Это может быть связано с тем, что jvm.dll из установки JRE 1.4.2 используется для запуска Eclipse (и, следовательно, Ant).

13
ответ дан 6 December 2019 в 07:24
поделиться

плохой файл класса: C: \ Program Files \ Java \ jre1.6.0_07 \ lib \ rt.jar (java / io / IOException.class)
файл класса имеет неправильную версию 49.0, должно быть 48.0

Это говорит о том, что упомянутый файл класса был скомпилирован с использованием компилятора, который генерирует файлы классов версии 49.0, в то время как ant ожидает, что он будет скомпилирован с использованием компилятора, который генерирует файлы классов версия 48.0. Поскольку рассматриваемый класс является частью JRE, вам необходимо обновить путь к классам в вашем build.xml , чтобы включить JRE, содержащую файлы классов версии 48.0.

3
ответ дан 6 December 2019 в 07:24
поделиться

Прежде всего, настройки вашего проекта не имеют ничего общего с вашим сценарием сборки. Настройки проекта говорят вам, как Eclipse строит ваш проект, а не как будет работать ваш ant-файл.

Чтобы узнать, под каким именем запускается jvm ant, щелкните правой кнопкой мыши сценарий сборки в Eclipse и выберите «Запуск от имени ...». Во всплывающем диалоговом окне перейдите на вкладку jvm и проверьте, какой jre используется для запуска вашего скрипта.

3
ответ дан 6 December 2019 в 07:24
поделиться

Возможно, вам нужно использовать JDK JRE, который находится в C:\Program Files\Java\jdk\jre, а не общедоступный

0
ответ дан 6 December 2019 в 07:24
поделиться

Похоже, вы используете Ant с компилятором java версии 1.5, но компилируете библиотеки классов (rt.jar) установки 1.6. Вы должны настроить свой build.xml так, чтобы он последовательно использовал обе (компилятор и библиотеки классов) одной и той же версии Java.

2
ответ дан 6 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: