update-alternatives を使用して Temurin JDK を適切にインストールする方法

update-alternatives を使用して Temurin JDK を適切にインストールする方法

Temurin JDK 8と11の両方をインストールしたかったので、次の手順でインストールしました。

wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz
tar xzf OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz

sudo mv jdk8u312-b07/  /usr/lib/jvm/temurinjdk-8-hotspot-amd64

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/temurinjdk-8-hotspot-amd64/bin/java" 1081
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/temurinjdk-8-hotspot-amd64/bin/javac" 1081

しかし、これが 100% 正しいかどうかはわかりません。また、.jinfo ファイルを生成するにはどうすればよいのでしょうか。これは必要なのでしょうか。

答え1

あなたはAdoptium Debian / Ubuntu リポジトリ

  1. Eclipse Adoptium GPGキーを追加する

    wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo apt-key add -
    
  2. Eclipse Adoptium aptリポジトリを追加する

    echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
    
  3. 必要なTemurinバージョンをインストールします

    sudo apt update # update if you haven't already
    sudo apt install temurin-8-jdk
    sudo apt install temurin-17-jdk
    
  4. デフォルトバージョンを設定する

    sudo update-alternatives --config java
    

答え2

私はオリジナルの AdoptOpenJDK deb パッケージからスクリプトを抽出し、次のように変更したバージョンを使用しています。

wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_linux_hotspot_17.0.1_12.tar.gz

mkdir -p /usr/lib/jvm

sudo tar -xvvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.1_12.tar.gz -C /usr/lib/jvm/

sudo ./java-alternative install /usr/lib/jvm/jdk-17.0.1+12
sudo ./java-alternative set /usr/lib/jvm/jdk-17.0.1+12
sudo ./java-alternative remove /usr/lib/jvm/jdk-17.0.1+12

スクリプトのソースコード:

#!/bin/sh

set -eu

priority=2222
#jdk_base_dir=/usr/lib/jvm/adoptopenjdk-11-hotspot-amd64
#jdk_base_dir=/usr/lib/jvm/jdk-17.0.1+12
jdk_base_dir="$2"

if [ ! -d "$jdk_base_dir" ]
then
    echo "Invalid java directory. Choose one of: ";
    ls -1d /usr/lib/jvm/*
    exit
fi

tools="jaotc jar jarsigner java javac javadoc javap jcmd jconsole jdb jdeprscan jdeps jfr jhsdb jimage jinfo jjs jlink jmap jmod jps jrunscript jshell jstack jstat jstatd keytool pack200 rmic rmid rmiregistry serialver unpack200 jexec jspawnhelper"

case "$1" in
install)
    for tool in $tools ; do
        for tool_path in "$jdk_base_dir/bin/$tool" "$jdk_base_dir/lib/$tool" ; do
            if [ ! -e "$tool_path" ]; then
                continue
            fi

            slave=""
            tool_man_path="$jdk_base_dir/man/man1/$tool.1"
            if [ -e "$tool_man_path" ]; then
                slave="--slave /usr/share/man/man1/$tool.1 $tool.1 $tool_man_path"
            fi

            update-alternatives \
                --install \
                "/usr/bin/$tool" \
                "$tool" \
                "$tool_path" \
                "$priority" \
                $slave
        done
    done
;;
remove)
    for tool in $tools ; do
        for tool_path in "$jdk_base_dir/bin/$tool" "$jdk_base_dir/lib/$tool" ; do
            if [ ! -e "$tool_path" ]; then
                continue
            fi

            update-alternatives \
                --remove \
                "$tool" \
                "$tool_path"
        done
    done
;;
set)
    for tool in $tools ; do
        for tool_path in "$jdk_base_dir/bin/$tool" "$jdk_base_dir/lib/$tool" ; do
            if [ ! -e "$tool_path" ]; then
                continue
            fi

            update-alternatives \
                --set \
                "$tool" \
                "$tool_path"
        done
    done
;;
esac

関連情報