macOS에서 여러 JDK 관리하기

Gwon HongGwon Hong
2 min read

#1 openjdk 설치하기

우선 brew search --formulae openjdk 를 통해 설치가능한 JDK를 확인하면 다음과 같다:

openjdk
openjdk@11
openjdk@17
openjdk@21
openjdk@8
openj9
openjph
openvdb

이 중 원하는 버전들을 brew install openjdk@11 과 같이 설치하자.

위에서 설치한 openjdk 들은 macOS가 바로 확인할 수 없다. macOS는 /Library/Java/JavaVirtualMachines 만 확인하는데, openjdk는 (M1-Mac 기준) /opt/homebrew/Cellar 에 설치되기 때문이다. 따라서 우리는 바로가기를 수동으로 생성해주어야한다. 이를 대신 해주는 간단한 스크립트를 작성해보았다:

이를 다운받아서 실행하면 된다! 수동으로는

sudo ln -sfn /opt/hombrew/opt/openjdk@{version}/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-{version}.jdk

를 각 설치한 jdk 마다 반복해주면 된다.

#3 여러 JDK 중 선택해서 실행하기

#3-1 간단한 alias

/usr/libexec/java_home -v {version} 을 통해 원하는 버전의 JDK를 가리킬 수 있다. 이를 이용해서

alias java-17="export JAVA_HOME=`/usr/libexec/java_home -v 17`; java -version"

위와 같은 코드를 ~/.zshrc 와 같은 본인이 사용하는 shell init 파일에 추가해주면 영구적으로 바로가기를 생성한 것이다. 이렇게 하고 나면 java-17 을 통해 java 17 버전으로 설정하고, java /path/to/java/file 을 통해 해당 파일을 실행할 수 있다.

끝의 java -version 은 설정 후 정확히 어떤 버전으로 설정되었는지를 표시해주기 위해 존재하는 코드이다.

#3-2 조금 더 팬시한 alias

javahome() {
  unset JAVA_HOME 
  export JAVA_HOME=$(/usr/libexec/java_home -v "$1");
  java -version
}
alias j1.8='javahome 1.8'
alias j11='javahome 11'
alias j17='javahome 17'

위와 같은 javahome() 함수를 통해 alias 하는 것이다. 기본적인 원리는 #3-1과 같으나 좀 더 쌈뽕하다! 당연히 j11 대신 javahome 11 으로도 설정이 가능하다.

References

https://medium.com/@manvendrapsingh/installing-many-jdk-versions-on-macos-dfc177bc8c2b

https://medium.com/miro-engineering/how-to-switch-between-java-lts-versions-8-11-and-17-on-mac-cb6717d1272

0
Subscribe to my newsletter

Read articles from Gwon Hong directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Gwon Hong
Gwon Hong