Eclipse не скомпилируется, неверный файл класса, неправильная версия - PullRequest
7 голосов
/ 21 августа 2010

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

Вот мои специфичные для проекта настройки: 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

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

Ответы [ 9 ]

13 голосов
/ 21 августа 2010

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

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

ADDENDUM

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

ADDENDUM # 2

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

3 голосов
/ 24 августа 2010

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

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

3 голосов
/ 21 августа 2010

файл плохого класса: 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, вам необходимо обновить classpath в вашем build.xml, чтобы включить JRE, содержащий файлы классов версии 48.0.

2 голосов
/ 14 апреля 2012

Сообщение об ошибке означает, что инструмент компилятора, включенный в tool.jar, который использует ваш Ant, имеет более старую версию, чем класс, который он пытается скомпилировать.Сообщение «файл класса [javac] имеет неправильную версию 50.0, должно быть 49.0» будет означать, что вашему файлу класса требуется jdk 6.0, но ваш tool.jar поставляется из дистрибутива jdk 5.0Чтобы переключиться на правильный файл tools.jar в eclipse, откройте «Окно»> «Установки»> «Ant»> «Runtime»> «Global Entries».

2 голосов
/ 21 августа 2010

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

1 голос
/ 04 апреля 2011

Вы можете попробовать скопировать tools.jar из jdk/jre в common/lib кота.

Это сработало для меня, как продемонстрировано здесь

0 голосов
/ 19 января 2016

Изменение tools.jar в eclipse на правильную версию исправило это. Я использовал jre 1.6 и мне пришлось изменить его на 1.8, чтобы получить файл класса в версии 52.

0 голосов
/ 15 сентября 2015

Вам необходимо изменить версию Java для ANT также потому, что если вы используете среду выполнения в качестве JDK1.8, тогда ваш ANT также должен указывать на ту же версию, или Ant должен ссылаться на файл tools.jar из JDK1.8 / lib /tools.jar местоположение. Чтобы решить эту проблему, в Eclipse перейдите в Window -> Preference -> Ant -> Runtime -> Global Entries. Здесь проверьте и обновите путь tools.jar до последней версии, как показано ниже: C: \ Program Files \ Java \ jdk1.8.0_60 \ lib \ tools.jar

Затем запустите ваш скрипт сборки, проблема будет решена. :)

0 голосов
/ 24 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...