Рубрики
Без рубрики

Управление JDK в Mac OS

С увеличением числа сборок JDK и более частой частотой выпуска мне было трудно работать… Помечен java, macos, jdk, java 14.

С увеличением числа сборок JDK и более частой частотой выпуска мне стало трудно отслеживать, что я установил в своей macOS, и переключаться между ними на лету.

Даже в 2020 году моя предпочтительная версия Java – 1.8 (хотя я стараюсь максимально использовать Java 14), вероятно, потому, что это версия, которую я использую на своей работе. Но в зависимости от случая я обнаруживаю, что экспериментирую с новыми функциями из более поздних версий или даже из экспериментальных сборок:

  • Оболочка начиная с Java 9 и далее
  • Эпсилон
  • Использование var начиная с Java 10
  • Типы значений в Проекте Valhalla строит
  • ZGC (ключевая функция, которую я хочу начать использовать в Java 14)
  • и т.д.…

Кроме того, в настоящее время на моем персональном компьютере я в основном использую сборки Java из проекта Adopt OpenJDK. Но есть и другие сборки, которые я установил на свой macOS, чтобы попробовать:

Поэтому я потратил некоторое время на то, чтобы собрать некоторые функции bash , которые помогают мне управлять этими версиями и переключаться между ними на лету.

Полный сценарий bash см. здесь , но основные моменты:

Список JKDs

function listJDKs() {
    echo "$($java_home -V 2>&1)"
}

Выход

[:~]$listJDKs
Matching Java Virtual Machines (5):
    14, x86_64: "AdoptOpenJDK 14"   /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
    13.0.2, x86_64: "AdoptOpenJDK 13"   /Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home
    1.8.0_222, x86_64:  "AdoptOpenJDK 8"    /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
    1.8.0_212, x86_64:  "GraalVM CE 19.0.0" /Library/Java/JavaVirtualMachines/graalvm-ce-19.0.0/Contents/Home
    1.8.0_163-zulu-8.28.0.1, x86_64:    "Zulu 8"    /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

Перечислите различные сборки JDK

function listJDKVendors() {
    echo "$($java_home -V 2>&1 | tr ' ' '\0' | tr '\t' ' ' | cut -d ' ' -f2,1)"
}

Выход

[:~]$listJDKVendors
MatchingJavaVirtualMachines(5):
14,x86_64: "AdoptOpenJDK14"
13.0.2,x86_64: "AdoptOpenJDK13"
1.8.0_222,x86_64: "AdoptOpenJDK8"
1.8.0_212,x86_64: "GraalVMCE19.0.0"
1.8.0_163-zulu-8.28.0.1,x86_64: "Zulu8"

Установите JDK для определенной версии/поставщика

function setJDK() {

    local USAGE="Usage: setJDK [-v \${JDK_VERSION}] [-d \${JDK_DISTRIBUTION}]"

    local OPTIND v d
    while getopts "v:d:" OPTION; do
        case "$OPTION" in
            v)
                local version=$OPTARG
                ;;
            d)
                local dist=$OPTARG
                ;;
            ?)
                echo $USAGE
                return 1
                ;;
        esac
    done

    if [ $# -lt 1 ]; then
        echo $USAGE
        return 1
    fi

    if [ -n "$version" ] && [ "$dist" ]; then
        echo "Setting JAVA to version $version and distribution $dist"
        local versionAndDistNo=$($java_home -V 2>&1 | grep $dist | grep $version | wc -l)
        if [ "$versionAndDistNo" -gt 1 ];then
            echo "Multiple JAVA versions found for arguments -v $version -d $dist . Unable to setJDK"
            listJDKs
            return 1
        else
            export JAVA_HOME=$($java_home -V 2>&1 | grep $dist | grep $version | tr ' ' '\0' | tr '\t' ' ' | cut -d ' ' -f 3)
        fi
    elif [ -n "$dist" ]; then
        echo "Setting JAVA to distribution $dist"
        local distNo=$($java_home -V 2>&1 | grep $dist | wc -l)
        if [ $distNo -gt 1 ];then
            echo "Multiple versions for $dist. Unable to setJDK"
            listJDKs
            return 1
        else
            export JAVA_HOME=$($java_home -V 2>&1 | grep $dist | tr ' ' '\0' | tr '\t' ' ' | cut -d ' ' -f 3)
        fi
    elif [ -n "$version" ]; then
        echo "Setting JAVA to version $version"
        export JAVA_HOME=$($java_home -v $version)
    else
        echo $USAGE
    fi

    echo "JAVA_HOME=${JAVA_HOME}"
    return 0
}

Выход

[:~]setJDK -v 14
Setting JAVA to version 14
JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home

Обратите внимание, что java_home=/usr/libexec/java_home

Оригинал: “https://dev.to/nikos_katsanos/managing-jdks-in-macos-27p9”