Разрешение конфликта версий между java и javac в Ubuntu

У меня проблема с скомпилированным Java-приложением в Ubuntu. Выдает UnsupportedClassVersionError. Я компилирую с более высокой версией JDK, чем та, которая настроена в моем PATH для запуска Java:

$ javac -version
javac 1.7.0_147

$ java -version
java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Client VM (build 20.0-b11, mixed mode, sharing)

Как я могу решить эту проблему?


person xralf    schedule 14.05.2012    source источник
comment
вы можете задать этот вопрос на askubuntu.com В любом случае, проверьте, какие пакеты Java установлены, и если jre v1.7 также установлен, вы можете необходимо настроить, какую версию использовать с альтернативами   -  person Grims    schedule 14.05.2012
comment
В качестве альтернативы попробуйте скомпилировать с -target 1.6 или -source 1.6.   -  person Fred Foo    schedule 14.05.2012


Ответы (5)


Выполните одно из следующих действий, чтобы определить, где находится этот

javac 1.7.0_147

используется следующим образом:

whereis javac

or

 locate javac

or

find javac

Затем, как только вы нашли каталог, символически и принудительно свяжите содержимое bin с /usr/bin:

sudo ln -f -s [put location here]/bin/* /usr/bin
person thejartender    schedule 14.05.2012
comment
У меня та же проблема, но когда я пытаюсь это сделать, я получаю новую, другую ошибку: слишком много уровней символических ссылок. - person Paul; 24.05.2016
comment
-1, пожалуйста, не пытайтесь ответить на этот вопрос. Я думаю, что его следует отменить как принятый ответ. Это, скорее всего, приведет к тому, что ваша машина будет необратимо испорчена, создавая циклические символические ссылки по всему каталогу /usr/bin, которые нельзя удалить! - person Paul; 24.05.2016
comment
@Paul Этот ответ был адресован человеку, чей javac был не в /usr/bin. Если [put location here]/bin оказалось /usr/bin, то команда становится чем-то совершенно нелепым, о чем вы должны были знать - если бы вы пытались понять это решение, а не применять его вслепую. - person ; 24.05.2016
comment
Я полагаю, это правда. Я не хотел обидеть, и я думаю, что ответ все еще полезен. Но, может быть, моя публичная глупость убережет кого-то еще от совершения той же ошибки. - person Paul; 24.05.2016

Введите следующую команду в терминале:

  sudo update-alternatives --config java

Он попросит вас:

Есть 2 варианта альтернативного java (предоставление /usr/bin/java).

  Selection      Path                                            Priority   Status

    0           /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      auto mode

    1           /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode

    2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java  1051      manual mode


  Press enter to keep the current choice[*], or type selection number:

Я ввожу 2, так как хочу использовать java 1.7.0_21

person Ruju    schedule 28.05.2013
comment
Этот вариант работал у меня на Ubuntu 18.04. - person Mandar Pandit; 07.02.2021

Вам также нужно будет сделать:

sudo update-alternatives --config javac

Выберите нужный компилятор Java из предоставленного списка. Например на Центос 5

There are 2 programs which provide 'javac'.
Selection    Command
-----------------------------------------------
1           /usr/lib/jvm/java-1.6.0-openjdk/bin/javac
*+ 2        /usr/lib/jvm/java-1.7.0-openjdk/bin/javac
person Tony    schedule 17.06.2015

Это то, что вам нужно Java и Ubuntu. В основном у меня такая же конфигурация, но я переключаюсь между Glassfish и Java7. Взгляните и попробуйте настроить среду Java аналогичным образом.

person apesa    schedule 14.05.2012

Я добавил и установил альтернативы для Java и Javac, выполнив следующие действия:

Шаг 1. Добавьте альтернативы Java и Javac:

Команда для добавления Javac:

sudo update-alternatives --install "/usr/bin/java" "java" "/opt/amazon-jdk-11/bin/java" 1 

то есть: "/opt/amazon-jdk-11/bin/javac" это новый путь к java

sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/amazon-jdk-11/bin/javac" 1

то есть: /opt/amazon-jdk-11/bin/javac — это новый путь к javac

Шаг 2: Установка альтернатив Java и Javac:

sudo update-alternatives --config javac
sudo update-alternatives --config javac

После того, как вы введете вышеуказанную команду, вы сможете увидеть экран, как показано ниже, вы можете выбрать свой номер, который вы хотите настроить java.

введите здесь описание изображения

Я выбрал " 1 " в списке, так как хотел установить "/opt/amazon-jdk-11/bin/java" в качестве своего javac.

Убедитесь, что ваша альтернативная установка Java выполнена успешно или нет, с помощью следующих команд:

which javac и which java вы сможете увидеть экран, как показано ниже:

введите здесь описание изображения

person Gautam    schedule 25.11.2019