Мне необходимо собирать приложения java с помощью старой версии openjdk-11 (конкретно - openjdk-11.0.2).
Но при этом, я не могу просто удалить из системы дефолтный openjdk, поскольку от него зависят многие пакеты.
Поэтому я установлю в системе ту версию что мне нужно параллельно с текущей.
Скачиваем:

wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz

Распаковываем:

sudo tar -xvf ./openjdk-11.0.2_linux-x64_bin.tar.gz -C /usr/lib/jvm/

Смотрим что у нас сейчас запускается под видом java (интересует текущий приоритет):

update-alternatives --query java

Прописываем альтернативный бинарник с приоритетом больше, чем текущий (последние цифры в команде):

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.0.2/bin/java 1122

И вот таким скриптом я заменяю все дефолтные бинарники java:

#!/bin/bash

new_path='/usr/lib/jvm/jdk-11.0.2/bin/'
bin_path='/usr/bin'
priority='1122'

for binary in `find /usr/lib/jvm/jdk-11.0.2/bin/ -type f`
do
  sudo update-alternatives --install $bin_path/`basename $binary` `basename $binary` $binary $priority
done

Также нужно, чтобы переменная $JAVA_HOME указывала на нужную JAVA. Обычно она указывает на /usr/lib/jvm/default-java, которая является симлинком до нужной директории. Делаем:

cd /usr/lib/jvm/
sudo rm -f default-java
sudo ln -s jdk-11.0.2 default-java
Enter your comment. Wiki syntax is allowed:
F Y X W​ Y
 
  • linux_faq/multiple_java_versions.txt
  • Last modified: 2020/12/09 16:00
  • by admin