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)
★★★★★

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

Кстати, как соотносится «11.0.9.1» и 55.0 JRE?

55.0 - это версия байткода, а не JRE

https://javaalmanac.io/bytecode/versions/

Java 1.0 	45.0
Java 1.1 	45.3
Java 1.2 	46.0
Java 1.3 	47.0
Java 1.4 	48.0
Java 5 	        49.0
Java 6 	        50.0
Java 7 	        51.0
Java 8 	        52.0
Java 9 	        53.0
Java 10 	54.0
Java 11 	55.0
Java 12 	56.0
Java 13 	57.0
Java 14 	58.0
Java 15 	59.0
Java 16 	60.0
Java 17 	61.0
hummer
()

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

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

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

hummer
()
Последнее исправление: hummer (всего исправлений: 1)
Ответ на: комментарий от hummer
c@c-desktop:~$ which java
/usr/bin/java
c@c-desktop:~$ which javac
/usr/bin/javac
c@c-desktop:~$ 
tiinn ★★★★★
() автор топика

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

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

Или ставь жаву из нормальных деб-пакетов

Ссылочку на нормальные деб-пакетов не подскажете? А то на сайте у них только .rpm

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

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

hummer
()
Ответ на: комментарий от 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 ★★★★★
() автор топика
Ответ на: комментарий от tiinn

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

Для нормальных языков да, но у энтерпрайз шлака ориетированность на тыкающих в ide макак, там это по умолчанию подразумевают.

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

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

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

150 раз даже тут обсуждалось, что ты такой беспомощный.

Кабы не было на свете беспомощных людей, ЛОР не нужен был бы.

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

Не пытайся оправдать свою лень и беспомощность.

anonymous
()

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

лично я начал изучать 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)
Ответ на: комментарий от tiinn

Отвратительная. У языка выразительность в районе -3 из 10, без IDE хоть плачь. Самый минимум — это eclim какой-нибудь.

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

Коммента гаже год не видал.

Ну, пойди, поблюй, полегчает

tiinn ★★★★★
() автор топика

Итак, помогло

sudo update-alternatives --config java

с ручным выбором правильного пути

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

Там без IDE делать нехер. У ява/ооп/макак традиции делать кучу мусора на каждый пук и просто так, на вырост.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.