LINUX.ORG.RU

можно ли даунгрейднуть версию JDK?

 , ,


0

1

Debian 10. Ставил яву по этой инструкции, в частности, скачал JDK c сайта, а потом

cd ~/Downloads
sudo tar -xf jdk-15.0.1_linux-x64_bin.tar.gz -C /usr/lib/jvm
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-15.0.1/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-15.0.1/bin/javac 1
sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk-15.0.1/bin/javaws 15

Теперь у меня

c@c-desktop:~/Projects$ java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode, sharing)
c@c-desktop:~/Projects$ javac -version
javac 15.0.1
c@c-desktop:~/Projects$

Соответственно,

c@c-desktop:~/Projects$ java -cp . MyFirstApp

Выдаёт

Error: LinkageError occurred while loading main class MyFirstApp java.lang.UnsupportedClassVersionError: MyFirstApp has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 55.0

Кстати,

c@c-desktop:~/Projects$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk-15.0.1/bin/javaws 15
update-alternatives: ошибка: альтернативный путь /usr/lib/jvm/jdk-15.0.1/bin/javaws не существует
c@c-desktop:~/Projects$ 

Так вот, могу я даунгрейднуть версию JDK, до «11.0.9.1»? Кстати, как соотносится «11.0.9.1» и 55.0 JRE?

А, ну, да,

c@c-desktop:~/Projects$ /usr/lib/jvm/jdk-15.0.1/bin/java -version
java version "15.0.1" 2020-10-20
Java(TM) SE Runtime Environment (build 15.0.1+9-18)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)
★★★★

Основная проблема у тебя, как я вижу, в том, что java запускается не через симлинк, за который отвечает update-alternatives, а как-то иначе. Сравни выхлоп which java и which javac. Думаю, это подтолкнёт тебя к правильному решению. Возможно у тебя просто неправильно определены пути в PATH.

альтернативный путь /usr/lib/jvm/jdk-15.0.1/bin/javaws не существует

В Java 11 javaws удалили. Ты пользуешься старой инструкцией.

hummer ()
Последнее исправление: hummer (всего исправлений: 1)

Разберись со своими симлинками, кто куда указывает. А ещё лучше не лезть в систему со своими левыми архивами. Или ставь жаву из нормальных деб-пакетов, или распаковывай жаву в какой-нибудь /opt и настраивай $PATH, не трогая ничего в /usr.

Legioner ★★★★★ ()
Ответ на: комментарий от hummer

А зачем 15-й Java обязательно подменять 11-ю в PATH и alternatives? И в IntelliJ и в Maven/Gradle можно указать каким JDK и откуда компилировать/запускать.

Просто не хотелось городить IDE для целей эту яву выучить.

tiinn ★★★★ ()
Ответ на: комментарий от tiinn

Учить Java в блокноте - тоже довольно нехорошая идея. Для обучения можно и JDK и IDE и maven/gradle установить у себя в домашней директории, без пакетных менеджеров и игр с системными симлинками.

hummer ()
Ответ на: комментарий от hummer

Учить Java в блокноте - тоже довольно нехорошая идея

Хм, всегда считал, что хорошая.

Для обучения можно и JDK и IDE и maven/gradle установить у себя в домашней директории, без пакетных менеджеров и игр с системными симлинками.

Это так, но какую в тырнете нашёл инструкцию, так и сделал.

tiinn ★★★★ ()
Ответ на: комментарий от anonymous

Не в тыкании дело. Java довольно длиннословна, с большим API, который трудно запоминать. Поэтому у новичков, так же как ТС думающих, что начинать нужно в блокноте, весьма высок процент опечаток, с которыми они потом идут задавать вопросы «почему не работает?» на всякого рода javatalks.ru и прочии stackoverflow. В IDE такие опечатки, связанные с API, видны сразу. Там удобно искать необходимый функционал API и читать его javadoc. Там так же удобно наблюдать в отладчике как ведёт себя программа и как работает код стандартной библиотеки, поставляемый вмести с JDK. Поэтому я считаю, что начинать изучение Java полезнее сразу в IDE, в котором потом предстоит работать.

hummer ()

Тут все правильно пишут но…

лично я начал изучать java в незапамятные времена без ide, если кодить только с java classpath то ide не нужно, мне хватало и javadoc. Очепятки конечно будут в названиях методов, но тогда научишься читать ошибки компилятора java.

Я начинал больше 15 лет назад, а сейчас наверное сразу учат java + gradle/maven + spring.

В IDE намного проще работать с фреймворками и либами, т.к. дока у постоянно изменяющихся либ и фремворкво всегда куцая, а IDE позволяет «путешествовать» по исходникам подключенных зависимостей, т.е. в IDE можно быстро переходить как по своим исходникам, так и по classpath, если исходников в репозитарии maven/gradle нет то классы декомпилируются в вполне читаемый код java (в community idea отличный декомпилятор). Уметь читать чужой код это очень важно.

По поводу исходного вопроса, когда мне нужна определенная версия java то я скачиваю бинарный tar и распаковываю, например в /opt/java/jdk_X.Y.Z, потом создаю симлинк указывающий на эту версию /opt/java/current и использую jdk через симлинк. Потом его можно переопределить на другую версию java. В PATH у меня JAVA_HOME, где JAVA_HOME=/opt/java/current

С переходом на Ubuntu 20.04 я пока пользуюсь теми jdk что в дистрибутиве, грамотно собраны пакеты, можно поставить несколько версий java и быстро переключаться.

Aber ★★★★ ()
Последнее исправление: Aber (всего исправлений: 1)