Skip to content

Instantly share code, notes, and snippets.

@sirinath
Created December 6, 2020 13:22
Show Gist options
  • Save sirinath/71965529a8ef8b91318aab668788bb3c to your computer and use it in GitHub Desktop.
Save sirinath/71965529a8ef8b91318aab668788bb3c to your computer and use it in GitHub Desktop.
Installing and Maintaining JDK Distros using Jabber
@echo off
setlocal EnableDelayedExpansion EnableExtensions
if not defined JABBA_HOME set JABBA_HOME=%USERPROFILE%\.jabba
set JABBA_JDK=%JABBA_HOME%\jdk
set JABBA=%JABBA_HOME%\bin\jabba.exe
set "JABBA_PARAM=--arch amd64 --latest minor --os windows"
set USER_JDKS=%USERPROFILE%\.jdks
echo.Setting JABBA_HOME=%JABBA_HOME%
echo.Setting JABBA_JDK=%JABBA_JDK%
echo.Setting JABBA=%JABBA%
echo.JABBA params=%JABBA_PARAM%
echo.Setting USER_JDKS=%USER_JDKS%
echo.
if [%1] equ [] set "JDK_DISTRO=adopt@ adopt-openj9@ zulu@ liberica@ graalvm-ce-java8@ graalvm-ce-java11@"
if [%1] neq [] set "JDK_DISTRO=%~1"
if [%2] equ [] set "JDK_VER=1.11 1.8 20.3 zulu@1.15 zulu@1.13"
if [%2] neq [] set "JDK_VER=%~2"
echo.Distros=%JDK_DISTRO%
echo.Versions=%JDK_VER%
echo.
if [%3] equ [] set "DEFAULT_DISTRO=zulu"
if [%3] neq [] set "DEFAULT_DISTRO=%~3"
echo.Defualt distro=%DEFAULT_DISTRO%
echo.
echo.Building installed distro list
set "INSTALLED_JDKS="
for /F "tokens=* usebackq" %%G in (`%JABBA% ls`) do set "INSTALLED_JDKS=!INSTALLED_JDKS!%%G "
echo.Installed JDKs: %INSTALLED_JDKS%
echo.
echo.Building newer distro list
set "JDK_LIST="
for /F "tokens=* usebackq" %%G in (`%JABBA% ls-remote %JABBA_PARAM%`) do set "JDK_LIST=!JDK_LIST!%%G "
echo.JDK List: %JDK_LIST%
echo.
echo.Checking old distros
for /F "tokens=* usebackq" %%G in (`%JABBA% ls ^| findstr /V "%JDK_LIST%"`) do (
echo.Processing %%G
set DISTRO=
set FULL_VER=
for /f "tokens=1,2 delims=@" %%X in ("%%G") do (
echo.Tokenising %%X %%Y
set DISTRO=%%X
set FULL_VER=%%Y
)
echo.DISTRO=!DISTRO!, FULL_VER=!FULL_VER!
set VER=
set PATCH=
for /f "tokens=1,2 delims=-" %%X in ("!FULL_VER!") do (
echo.Tokenising %%X %%Y
set VER=%%X
set PATCH=%%Y
)
echo.VER=!VER!, PATCH=!PATCH!
set ONE=
set MAJOR=
set MINOR=
for /f "tokens=1,2,3 delims=." %%X in ("!VER!") do (
echo.Tokenising %%X %%Y %%Z
set ONE=%%X
set MAJOR=%%Y
set MINOR=%%Z
)
echo.ONE=!ONE!, MAJOR=!MAJOR!, MINOR=!MINOR!
echo.Removing: %%G
%JABBA% uninstall %%G
if exist %JABBA_JDK%\!DISTRO!@!ONE!.!MAJOR! (
echo.Removing link: %JABBA_JDK%\!DISTRO!@!ONE!.!MAJOR!
rd %JABBA_JDK%\!DISTRO!@!ONE!.!MAJOR!
)
if exist %USER_JDKS%\!DISTRO!@!ONE!.!MAJOR! (
echo.Removing link: %USER_JDKS%\!DISTRO!@!ONE!.!MAJOR!
rd %USER_JDKS%\!DISTRO!@!ONE!.!MAJOR!
)
if exist %JABBA_JDK%\!ONE!.!MAJOR! (
echo.Removing link: %JABBA_JDK%\!ONE!.!MAJOR!
rd %JABBA_JDK%\!ONE!.!MAJOR!
)
if exist %USER_JDKS%\!ONE!.!MAJOR! (
echo.Removing link: %USER_JDKS%\!ONE!.!MAJOR!
rd %USER_JDKS%\!ONE!.!MAJOR!
)
)
echo.Done removing old distros
echo.
echo.Checking for newer distros
for /F "tokens=* usebackq" %%G in (`%JABBA% ls-remote %JABBA_PARAM% ^| findstr /V "%INSTALLED_JDKS%" ^| findstr "%JDK_DISTRO%" ^| findstr "%JDK_VER%"`) do (
echo.Processing %%G
set DISTRO=
set FULL_VER=
for /f "tokens=1,2 delims=@" %%X in ("%%G") do (
echo.Tokenising %%X %%Y
set DISTRO=%%X
set FULL_VER=%%Y
)
echo.DISTRO=!DISTRO!, FULL_VER=!FULL_VER!
set VER=
set PATCH=
for /f "tokens=1,2 delims=-" %%X in ("!FULL_VER!") do (
echo.Tokenising %%X %%Y
set VER=%%X
set PATCH=%%Y
)
echo.VER=!VER!, PATCH=!PATCH!
set ONE=1
set MAJOR=
set MINOR=
for /f "tokens=1,2,3 delims=." %%X in ("!VER!") do (
echo.Tokenising %%X %%Y %%Z
set ONE=%%X
set MAJOR=%%Y
set MINOR=%%Z
)
echo.ONE=!ONE!, MAJOR=!MAJOR!, MINOR=!MINOR!
echo.Installing: %%G
%JABBA% install %%G
)
echo.Done updating new distros
echo.
echo.Checking links
for /F "tokens=* usebackq" %%G in (`%JABBA% ls`) do (
echo.Processing %%G
set DISTRO=
set FULL_VER=
for /f "tokens=1,2 delims=@" %%X in ("%%G") do (
echo.Tokenising %%X %%Y
set DISTRO=%%X
set FULL_VER=%%Y
)
echo.DISTRO=!DISTRO!, FULL_VER=!FULL_VER!
set VER=
set PATCH=
for /f "tokens=1,2 delims=-" %%X in ("!FULL_VER!") do (
echo.Tokenising %%X %%Y
set VER=%%X
set PATCH=%%Y
)
echo.VER=!VER!, PATCH=!PATCH!
set ONE=
set MAJOR=
set MINOR=
for /f "tokens=1,2,3 delims=." %%X in ("!VER!") do (
echo.Tokenising %%X %%Y %%Z
set ONE=%%X
set MAJOR=%%Y
set MINOR=%%Z
)
echo.ONE=!ONE!, MAJOR=!MAJOR!, MINOR=!MINOR!
echo.Checking links for: %%G
for /F "tokens=*" %%X in ('%JABBA% which %%G') do (
echo.Installed location: %%X
if not exist %JABBA_JDK%\!DISTRO!@!ONE!.!MAJOR! (
echo.Linking %JABBA_JDK%\!DISTRO!@!ONE!.!MAJOR! to %%X
mklink /D %JABBA_JDK%\!DISTRO!@!ONE!.!MAJOR! %%X
)
if not exist %USER_JDKS%\!DISTRO!@!ONE!.!MAJOR! (
echo.Linking %USER_JDKS%\!DISTRO!@!ONE!.!MAJOR! to %%X
mklink /D %USER_JDKS%\!DISTRO!@!ONE!.!MAJOR! %%X
)
if not exist %USER_JDKS%\%%G mklink /D %USER_JDKS%\%%G %%X
if "!DISTRO!" equ "%DEFAULT_DISTRO%" (
if not exist %JABBA_JDK%\!ONE!.!MAJOR! (
echo.Creating default link %JABBA_JDK%\!ONE!.!MAJOR! to %%X
mklink /D %JABBA_JDK%\!ONE!.!MAJOR! %%X
)
if not exist %USER_JDKS%\!ONE!.!MAJOR! (
echo.Creating default link %USER_JDKS%\!ONE!.!MAJOR! to %%X
mklink /D %USER_JDKS%\!ONE!.!MAJOR! %%X
)
)
)
)
echo.Done checking links
echo.
endlocal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment