2013-03-13 11 views
3

Я пытаюсь скомпилировать Java-код с помощью Sun Java JDK 1.7.0_17 в системе Linux Mint, но у меня возникает эта проблема.Javac версии 1.7 не удалось построить для цели 1.7

$ javac -version -target 1.7 
javac 1.7.0_17 
javac: invalid target release: 1.7 

-target 1.6 не работает. Целевая задача 1.5 работает, но я получаю проблему версии как таковой,

$ javac -version -target 1.5 HelloWorld.java 
javac 1.7.0_17 
HelloWorld.java:2: cannot access java.lang.Object 
bad class file: /usr/lib/jvm/jdk1.7.0_17/jre/lib/rt.jar(java/lang/Object.class) 
class file has wrong version 51.0, should be 49.0 
Please remove or make sure it appears in the correct subdirectory of the classpath. 
class HelloWorldApp { 
^ 
1 error 

Есть ли где-нибудь список доступных целей ява за пределами ВС ява каталогов?

У меня нет указателей ClassPath или Javahome, и настройка их не помогает. jcontrol не помогает. Я также пробовал с 1.7.0_15, с аналогичными результатами.

+0

Каков результат работы 'which javac'? – madth3

+0

'javac' разрешает через/etc/альтернативы'/usr/lib/jvm/jdk1.7.0_17/bin/javac' –

ответ

0

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

javac -version -target 1.7 App.java 

(App.java - это имя файла).

я смог запустить JAVAC -version, и он дал мне ответ:

javac 1.7.0_17 

Итак, ясно, что знает, какая версия Java я использую.

Если я бегу, что вы сделали, хотя:

javac -version -target 1.7 

я получаю точно такое же сообщение, как мне делать, если я бегу только JAVAC -version:

javac 1.7.0_17 

Так что, кажется, что работает -версия и -target 1.7 означает, что значение 1.7 игнорируется.

У меня есть JAVA_HOME указан.

Зачем вам нужно указывать -target 1.7 в любом случае? Это должно быть значение по умолчанию, если вы используете 1.7.

В вашем первом сообщении о исходном коде вы хотели сказать «javac HelloWorld.java»? Поскольку это должна быть команда, я бы подумал, что вы хотите запустить ее. Не "javac -version -target 1.7".

+0

Мне не нужно указывать (ну, не нужно). Если я не укажу, он по умолчанию использует 1.5, что дает мне ошибку _wrong version_. –

+0

Не устанавливаются ли какие-либо Linux-системы с установленной версией Java? Может быть, эта версия java перегоняет тот, который вы установили? – CorayThan

+0

Я так и думал. Первоначально Mint установил OpenJDK 1.7 и 1.6. Никогда не было 1.5 (ни JDK, ни JRE). Я сдул оба и установил Sun 1.7.0_15 и теперь _17. Ни одна из них не работает. –

0

Обновление: я переустановил Монетный двор, и проблема исчезла. Не мой предпочтительный вариант, я должен сказать.

Мне еще предстоит сравнить различия между системами.

Может ли кто-нибудь подумать о том, как компилятор 1.7 не будет создавать код 1.7?

5

Я преследовал аналогичную проблему с участием Ubuntu, Netbeans и двух JDK: openJDK и oracleJDK. Оскорбительные (старые и нерелевантные) файлы были в конечном итоге размещены в/usr/java/packages и просто удалены.

я получал:

# javac -version hello.java 
javac 1.7.0_21 
hello.java:3: cannot access java.lang.Object 
bad class file: /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar(java/lang/Object.class) 
class file has wrong version 51.0, should be 49.0 
Please remove or make sure it appears in the correct subdirectory of the classpath. 
public class hello { 
    ^
1 error 

Что еще более важно, я нашел файлы с обижая:

# javac -verbose -version hello.java 

-verbose Опция перечисляет путь поиска для файлов класса.

Другие области разведаны в ходе моего исследования были:

  • значение переменной окружения JAVA_HOME с #echo $JAVA_HOME
  • значение переменной окружения PATH с #echo $JAVA_HOME
  • значение переменной окружения CLASSPATH с #echo $JAVA_HOME
  • варианты обновления с #update-alternatives --config javac
  • update-alternat ives с #galternatives
  • JDK, используемый Netbeans, установлен в /usr/local/netbeans-7.3/etc/netbeans.conf с переключателем netbeans_jdkhome=. Обратите внимание, что этот параметр переопределяет ДОПОЛНЕНО альтернативы
+0

О, но это было так близко. Я обнаружил, что, как вы и предполагали, некоторые старые файлы jar извлекаются из каталога _/usr/java/packages/lib/ext_. Удалив их, они отобрали их из ** - подробных ** списков, но в противном случае это не повлияло. Я все еще ошибаюсь. –

+0

Интересно, может ли [versioncheck] (https://code.google.com/p/versioncheck/) помочь вам отследить оскорбительную банку? – nhoj

+0

Я просто попробовал VersionChecker, и он, похоже, не помог, кроме того, что 1,7 совместимость Java была пустой, 'Major.Minor Version: 51.0 JAVA-совместимость:'. Увидев, что веб-страницы относятся только к 1.6, я предполагаю, что он не был перестроен для jdk7, а не для моей проблемы. –

0

Диагностика:

Вы можете увидеть, какая версия Java Maven использует, запустив "МВН --version"

решение для Debian:

МВН скрипт устанавливает внутреннюю переменную JAVA_HOME внутри, ища javac (which javac). Поэтому, если у вас несколько версий Java, установленных одновременно, например. JDK 6 и JDK 7 и использовать систему Debian Alternatives, чтобы выбирать между ними, даже если вы изменили альтернативу «java» на JDK 7, mvn все равно будет использовать JDK 6. Вы также должны изменить альтернативу для «javac». Например:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac