2014-11-21 3 views
2

Я только что изменил jdk от 1.6 до 1.8 и при принятии нового ant сборки, это дает такие сообщения об ошибках:Bad файл класса не удалось муравей построить

[javac] /usr/workspace/test/src/JsonString.java:7: cannot access java.lang.Object 
[javac] bad class file: java/lang/Object.class(java/lang:Object.class) 
[javac] class file has wrong version 52.0, should be 50.0 
[javac] Please remove or make sure it appears in the correct subdirectory of the classpath. 
[javac] public class JsonString { 
[javac] 

Это странно. класс Object должен быть в java1.8, как это может быть плохо? Кто-нибудь знает, как это решить?

+1

Вы смешиваете Java версии, вы используете 'javac' из JDK 6 со стандартной библиотекой из Java 8. Убедитесь, что установка Java правильно (проверьте' 'PATH' и JAVA_HOME'). – Jesper

+0

Мои 'javac' и' java_home' указаны на 'java1.8' – byteBiter

+1

Что показывает' java -version'? – manouti

ответ

1

Сначала проверьте, что задача javac не использует конкретный компилятор, отличный от стандартного. Это может произойти, если вы устанавливаете атрибут executable раскошелиться конкретный компилятор (наряду с fork="yes"), как уже упоминалось в task documentation:

исполняемым

полный путь к исполняемому файлу JAVAC для использования в case fork = "yes". По умолчанию используется компилятор Java-версии, на котором в настоящее время запущен Ant. Игнорируется, если fork = "no". Начиная с Ant 1.6 этот атрибут также может использоваться для указания пути к исполняемому файлу при использовании jikes, jvc, gcj или sj.

Если вы просто звоните javac без указания внешнего компилятора, то Ant будет использовать компилятор, который поставляется с версией Java, на которой запущен Ant. И из сообщения об ошибке явно используется компилятор Java 1.6 (для которого у classfiles есть версия 50.0). Ant обычно работает с использованием исполняемого файла java, найденного в переменной среды PATH. Поэтому убедитесь, что первый каталог Java, указанный в переменной PATH, - это Java 1.8.

В идеале у вас должно быть JAVA_HOME, установленного на путь Java 1.8, и у него есть PATH, как и для JAVA_HOME, так что обе указывают на ту же установку.

JAVA_HOME -> /path_to_jdk1.8 
PATH -> %JAVA_HOME%;...;/path_to_some_other_jdk 
Смежные вопросы