Я пытаюсь скомпилировать код, извлеченный из SVN от другого разработчика. В последнее время Eclipse доставлял мне немало хлопот.
Вот мои настройки для конкретного проекта:
Это раздел компиляции моего файла 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
Что означает эта ошибка?
Файл класса версии 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).
плохой файл класса: 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.
Прежде всего, настройки вашего проекта не имеют ничего общего с вашим сценарием сборки. Настройки проекта говорят вам, как Eclipse строит ваш проект, а не как будет работать ваш ant-файл.
Чтобы узнать, под каким именем запускается jvm ant, щелкните правой кнопкой мыши сценарий сборки в Eclipse и выберите «Запуск от имени ...». Во всплывающем диалоговом окне перейдите на вкладку jvm и проверьте, какой jre используется для запуска вашего скрипта.
Возможно, вам нужно использовать JDK JRE, который находится в C:\Program Files\Java\jdk\jre, а не общедоступный
Похоже, вы используете Ant с компилятором java версии 1.5, но компилируете библиотеки классов (rt.jar) установки 1.6. Вы должны настроить свой build.xml так, чтобы он последовательно использовал обе (компилятор и библиотеки классов) одной и той же версии Java.