본문 바로가기
Java

Windows에서 Java 버전 관리하기

by 하이방가루 2023. 2. 22.
728x90
반응형

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.

 

현재 문제점

  1. cmd.exe 에서 위 스크립트를 사용하여 java를 변경할 경우 변경된 환경변수를 적용하기 위해 cmd.exe를 재실행하여야 한다.
    • Chocolatey가 설치되어 있으면 refreshEnv 명령어를 통해서 현재 세션에 적용가능하다.
  2. 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

728x90
반응형

댓글