Ustawianie wersji javy od dowolnego dostawcy za pomocą SDKMAN
Niestety sdkman
nie umożliwia (jeszcze) ustawienia wersji javy bez wskazania dokładnego identyfikatora - czyli dokładnego numeru wersji oraz nazwy dostawcy np. 11.0.12-open
.
Czasem może być potrzeba ustawienia po prostu java 11, która jest zainstalowana - dowolny numer patch, od dowolnego dostawcy.
Jest otwarte zgłoszenie na github #920 z propozycją wprowadzenia tej funkcjonalności.
Funkcja autocomplete po części ułatwia ustawienie wersji javy bez znajomości dokładnego identyfikatora. Po wpisaniu polecenia sdk use java 11
i kliknięciu 2 razy TAB
wyświetla się lista zainstalowanych wersji java 11.
Problem pojawia się kiedy chcemy użyć ustawić wersję w jakimś skrypcie (np. w Continuous Integration).
Dlatego poniżej skrypt, który może być używany do realizacji takiego zadania.
Zapisz skrypt jako sdk_use_any_java.sh
1#!/bin/bash
2java_sdkman=$(find ~/.sdkman/candidates/java -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | grep "^$1" | sort -r | head -n1)
3if [[ -z $java_sdkman ]]; then
4 echo "Can't find java $1 installed by sdkman"
5 exit
6fi
7source "$HOME/.sdkman/bin/sdkman-init.sh"
8sdk use java $java_sdkman
Użycie w celu ustawienia java w wersji 11
1./sdk_use_any_java.sh 11
Napisałem też skrypt dodający alias sdkj
dzięki czemu można wywołać polecenie sdkj 11
, aby ustawić java 11.
1alias sdkj='_sdkman_use_any_java(){ java_sdkman=$(find ~/.sdkman/candidates/java -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | grep "^$1" | sort -r | head -n1) && if [[ -z $java_sdkman ]]; then echo "Cant find java $1 installed by sdkman"; return; fi && source "$HOME/.sdkman/bin/sdkman-init.sh" && sdk use java $java_sdkman; }; _sdkman_use_any_java'
Poniżej skrypt instalujący alias. Dostępny również na GIST:
1curl https://gist.githubusercontent.com/speedlog/c96ed2c40588c0482ea7123a5ae2f241/raw/c625bf9025634b4ee94336f8d1bd89276c9b68b0/sdk_use_any_java.sh >> ~/.bashrc
2source ~/.bashrc