less than 1 minute read

개발시에 다양한 자바 버전을 사용하는 경우가 발생하는데 그럴때마다 .zshrc의 환경 변수를 변경하고 다시 source .zshrc로 로드하는건 너무 번거롭다. 이 부분을 CLI로 변하게 하고 싶어서 찾아본 결과 두가지 글을 발견했다.

1. Switching Java Versions on MacOS [Snippets]

.zshrc에 추가

alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"

사용방법

$ j11

이 방법의 문제점은 터미널상에서 JAVA_HOME은 변경되는데 java -version 명령어를 호출하면 여전히 전 버전을 가리키고 있는 점이다.

2. How to switch JDK version on Mac OS X

.zshrc에 추가

function setjdk() {
  if [ $# -ne 0 ]; then
    if [ -n "${JAVA_HOME+x}" ]; then
        removeFromPath "$JAVA_HOME/bin"
    fi

    export JAVA_HOME=`/usr/libexec/java_home -v $@`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
}

function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}

사용방법

JDK 1.8로 변경

# JDK 1.8로 변경
$ setjdk 1.8

# JDK 11로 변경
$ setjdk 11

이 방법은 JAVA_HOME 환경변수가 존재한다면 PATH에서 자바환경 변수를 삭제하고 PATH에 변경하려는 자바환경변수를 다시 넣는 방법이다. 링크의 스크립트를 돌려보니 /System/Library/Frameworks/JavaVM.framework/Home/bin는 사용하지 않아서 제거 했다. 또한 자바 환변수를 삭제하는데 /bin을 추가하지 않아서 setjdk로 계속 변경하면은 가비지 패스가 쌓여서 그부분 약간 변경했다.

Jenv

Mac을 사용한다면 Jenv를 사용하는 방법이 더 좋을것 같다. 지금은 Jenv로 적용해서 사용중이다.

참고

Categories:

Updated:

Leave a comment