Dự án của tôi có nhu cầu test trên nhiều phiên bản Java Development Kit khác nhau. Vì vậy tôi xây dựng một shell script với UI để đơn giản hóa quá trình chuyển đổi giữa các JDK.

Giả sử tôi có đường dẫn /opt/jdk là đường dẫn đến phiên bản Java Development Kit hiện đang sử dụng.

Trước tiên tôi phải thêm /opt/jdk vào biến môi trường PATHJAVA_HOME như sau:

~/.bash_aliases

export JAVA_HOME=/opt/jdk
export PATH=/opt/jdk/bin:$PATH

Tạo một thư mục /opt/.jdk (có dấu chấm để ẩn thư mục này). Đây là nơi chứa tất cả các phiên bản JDK bạn muốn. Tên thư mục chứa JDK theo một cú pháp là jdk-<version>, ví dụ jdk-10.

Tải về Java SE tại trang Download của Oracle., lựa chọn bản i586 hoặc x64 tùy theo cấu hình máy và nhu cầu, lưu ý chỉ tải định dạng .tar.gz. Ví dụ tôi tải về bản jdk-8u191-linux-x64.tar.gz rồi giải nén vào /opt/.jdk như sau:

$ cd /opt/.jdk
$ tar zxf ~/Downloads/jdk-8u191-linux-x64.tar.gz
$ mv jdk1.8.0_191 jdk-08

Shell script sau sẽ hiển thị một menu để bạn chọn phiên bản JDK, sau đó tạo một soft link từ phiên bản JDK được chọn trong /opt/.jdk đến /opt/jdk.

/usr/local/bin/jdk-alt.sh

#!/bin/bash

JDK=/opt/jdk
JDK_BASE=/opt/.jdk
ALL_JDK=($(find ${JDK_BASE} -maxdepth 1 -type d -name 'jdk-*' | sort -n))

# Select the latest version by default
DEFAULT_JDK=${ALL_JDK[-1]}

# Find the current instance of JDK if any
if [ -L ${JDK} ]; then
    CUR_JDK=$(readlink -f ${JDK})
else
    CUR_JDK=${DEFAULT_JDK}
fi

args=()
for jdk in ${ALL_JDK[@]}; do
    # Select the current version
    if [ "${CUR_JDK}" = "${jdk}" ]; then
        selected=on
    else
        selected=off
    fi
    id=${jdk/*jdk-/}
    # Get the version number
    version=$(${jdk}/bin/java -version 2>&1 >/dev/null | \
              grep 'java version' | \
              sed -r 's/.* "([0-9._]+)".*/\1/' | \
              awk -F_ '{print $1}')
    # form the 'dialog' arguments
    args+=( ${id} "version ${version}" ${selected} )
done

# Show a dialog of all available JDK versions
choice=$(dialog --backtitle "ALTERNATIVE JAVA DEVELOPMENT KIT" \
         --radiolist "Select a JDK version:" 15 40 8 \
         "${args[@]}" 3>&1 1>&2 2>&3)

if [ -n "${choice}" ]; then
    sudo rm -f ${JDK} && \
    sudo ln -s ${JDK_BASE}/jdk-${choice} ${JDK}

    # Show the current JDK version
    ${JDK}/bin/java -version
fi

Phân quyền executable cho script.

$ sudo chmod +x /usr/local/bin/jdk-alt.sh

Gọi chạy như sau:

$ sudo jdk-alt.sh
Giao diện lựa chọn phiên bản JDK