Мне необходимо собирать приложения 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
Discussion