Изменение версии java в Ubuntu

Изменение версии java в Ubuntu

Рассматриваемая система — Ubuntu 22.04. Нужно сделать так, чтобы была возможность одной командой изменить дефолтную версию java.

На самом деле оно уже есть, и чтобы изменить версию java в ubuntu, нужно лишь использовать команду:

sudo update-alternatives --config java

Эта команда изменит ссылку файла /usr/bin/java, которая ссылается на одну из установленных версий java (обычно в директории /usr/lib/jvm). Также переменная JAVA_HOME, которая по-умолчанию ссылается на /usr/bin/java, попадёт в выбранную версию.


Всё работало до того момента, когда мне понадобилось добавить GraalVm.

Во-первых, GraalVm не появляется в списке update-alternatives;

Во-вторых, даже если его туда добавить, то например, Intellij Idea при попытке компилляции проекта выдает ошибку: ‘gu’ tool was not found in your JAVA_HOME.This probably means that the JDK at ‘/usr/bin/java’ is not a GraalVM distribution.

Проблема с граалем заключается в том, что Idea пытается найти другие бинарные файлы грааля в одной директории с файлом java из $JAVA_HOME, но их ведь нету в /usr/bin.

Проблема решается тем, чтобы удалить конфигурацию java из утилиты update-alternatives и сделать её по-новой, но теперь вместо того, чтобы управлять ссылкой на один только файл java, мы будем управлять ссылкой на всю директорию с джавой. Затем нужно переопределить переменную JAVA_HOME и добавить запись в переменную PATH для доступности команды java. Вот нужные для этого команды:


стандартное изменение версии java:

sudo update-alternatives --config java

Удаление конфигурации для java (перед удалением запомните где там находятся директории с вашей джавой, чтобы их потом использовать)

sudo update-alternatives --remove-all java

Настройка update-alternatives для манипуляции целыми директориями (заметьте, что в конце директорий уже нет /bin/java):

sudo update-alternatives --install /usr/bin/javahome java /usr/lib/jvm/java-17-openjdk-amd64 1
sudo update-alternatives --install /usr/bin/javahome java /usr/lib/jvm/graalvm-jdk-17.0.9+11.1 2
sudo update-alternatives --install /usr/bin/javahome java /usr/lib/jvm/java-11-openjdk-amd64 3
sudo update-alternatives --install /usr/bin/javahome java /usr/lib/jvm/java-17-openjdk-amd64 4

Показать значение переменной JAVA_HOME:

echo $JAVA_HOME

редактировать environment variables:

sudo nano /etc/environment

изменяем значение переменной на:
JAVA_HOME=»/usr/bin/javahome»

добавляем к переменной PATH подстроку:
:/usr/bin/javahome/bin

перечитать environment variables:

source /etc/environment

Теперь можете протестировать переключение java:

sudo update-alternatives --config java
$JAVA_HOME -version

при этом будет изменяться целиком содержимое директории /usr/bin/javahome

UPD: Intellij Idea почему-то не замечает изменения переменной JAVA_HOME и у меня срабатывает только после логаута юзера из системы

(Просмотрено 447 раз, 4 раз за сегодня)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *