1. Jabba 설치
PowerShell을 관리자 권한으로 연다. (PowerShell 오른쪽 클릭 -> 관리자 권한으로 실행 선택)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-Expression (
Invoke-WebRequest https://github.com/shyiko/jabba/raw/master/install.ps1 -UseBasicParsing
).Content
위 명령어를 실행한다.
개인권한 PowerShell로 설치하려 할 경우 관리자 PowerShell에서 다음 명령어로 보안설정을 변경하여야 한다. 그렇지 않으면 보안 오류가 발생한다.
Set-ExecutionPolicy Unrestricted
제대로 설치되었는지 확인하려면
jabba
를 입력해보면 된다.
cmd에서도 사용하기 위해서는 "%USERPROFILE%\.jabba\bin"을 환경변수 Path에 추가해주어야 한다.
2. Java SDK 설치
https://aws.amazon.com/ko/corretto 으로 접속하여 원하는 버전의 다운로드로 들어간 후 windows JDK에서 zip 파일의 다운로드 링크를 복사한다. (msi 파일 아님)
PowerShell을 실행한 후
jabba install {원하는 환경명}=zip+{다운로드 링크 주소}
# 예제
jabba install 17-aws=zip+https://corretto.aws/downloads/latest/amazon-corretto-17-x64-windows-jdk.zip
위의 명령어를 입력하면 java가 설치된다.
jabba ls 명령어를 통해서 설치된 환경명 리스트를 볼 수 있고, jabba use {환경명}을 통해 사용할 java 버전을 관리할 수 있다.
하지만 Path 및 JAVA_HOME 환경변수가 현재 세션에서만 지속된다.
따라서 스크립트를 이용하여 현재 사용자의 환경변수를 업데이트하는 방법을 사용하여 JAVA_HOME 변수를 변경한다.
원하는 환경명을 입력할 때 버전을 먼저 쓰는 것이 validation 통과가 쉽습니다.
amazon-17 -> validation 오류
17-amazon -> 사용 가능
3. 버전관리 스크립트 작성
다음 배치 스크립트는 다음 가정 하에 만들어졌다.
1. 모든 Java 버전은 Jabba를 사용하여 설정된다.
2. Java 버전은 다음과 같은 기본 위치에 설치된다.
%USERPROFILE%\.jabba\jdk
3. Path 변수는 JVM_HOME 변수(즉, %JAVA_HOME%/bin)를 기반으로 설정한다.
- Path 변수에 %JAVA_HOME%bin 변수가 반드시 있어야 한다.
아래는 내용을 복사하여 스크립트를 작성하고, jdkMan.bat 으로 저장하고, path에 경로를 넣어주거나 path에 이미 추가된 폴더에 넣는다.
@REM a utility script to set java environment variables
@REM as downloaded by jabba (https://github.com/shyiko/jabba)
@REM on a windows10 PC machine
@REM developed by gaurs (https://github.com/gaurs)
@REM updated on: 07-Feb-2021
@REM posted on jvmaware blog (https://jvmaware.com/blog/multiple-java-versions/)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
SET COUNT=1
SET UPDATED_PATH=""
SET CURR_PATH=""
IF "%~1"=="ls" (GOTO LS)
IF "%~1"=="use" (GOTO USE) ELSE (GOTO NONE)
:LS
SET FROM=%USERPROFILE%\.jabba\jdk
CD %FROM%
SET NUM=1
FOR /F "DELIMS=" %%D in ('DIR /A:D /B') DO (
ECHO !NUM! %%~D
SET /a NUM+=1
)
EXIT /B 0
:USE
SET FROM=%USERPROFILE%\.jabba\jdk
CD %FROM%
FOR /F "DELIMS=" %%D in ('DIR /A:D /B') DO (
SET name!COUNT!=%%~D
SET path!COUNT!=%%~FD
SET /a COUNT=!COUNT!+1
)
SET OPTION=%~2
SET NAME=!name%OPTION%!
SET LOCATION=!path%OPTION%!
ECHO selected option: %NAME% from locaton: %LOCATION%
GOTO SETPATHS
EXIT /B 0
:SETPATHS
ECHO setting the paths for current user only
SETX JAVA_HOME %LOCATION%
EXIT /B 0
:NONE
ECHO please enter valid value
EXIT /B 0
스크립트는 %USERPROFILE%/.jabba/jdk 위치 내에 현재 설치된 Java 환경명을 나열하고 사용자는 그 중 하나를 선택할 수 있다.
샘플 예제
> jdkMan ls
1 adopt@1.8.0-275
2 openjdk@1.15.0-1
> jdkMan use 1
selected option: adopt@1.8.0-275 from locaton: C:\Users\gaurs\.jabba\jdk\adopt@1.8.0-275
setting the paths for current user only
SUCCESS: Specified value was saved.
현재 문제점
- cmd.exe 에서 위 스크립트를 사용하여 java를 변경할 경우 변경된 환경변수를 적용하기 위해 cmd.exe를 재실행하여야 한다.
- Chocolatey가 설치되어 있으면 refreshEnv 명령어를 통해서 현재 세션에 적용가능하다.
- powershell 에서도 cmd와 같은 문제가 있다. 다만 jabba use 를 사용하여 현재 세션에 적용가능하다. (refreshenv로 해결안됨.)
현재 세션에서 환경변수를 refresh 할 수 있는 방법
출처
버전관리 스크립트 - https://jvmaware.com/multiple-java-versions/,
Jabba - https://github.com/shyiko/jabba,
Jabba 설치 - https://kwonnam.pe.kr/wiki/java/jabba
'Java' 카테고리의 다른 글
Gradle) Q클래스 import 안됨 문제 (feat. gradle source sets) (0) | 2023.04.22 |
---|---|
Gradle) Unsupported class file major version 64 오류 (0) | 2023.04.22 |
댓글