java -version과 javac -version이 다르게 표시될 때
터미널에서 java -version
과 javac -version
을 실행했을 때 Java(JDK)의 버전이 다르게 표시되는 경우가 있다.
개인적으론 특정 버전 설치와 변경이 편리한 jenv를 이용하는 두 번째 방법을 개인적으로 추천한다.
방법 1
먼저 /usr/libexec/java_home -V
을 실행하면 다음과 같이 출력이 된다.
Matching Java Virtual Machines (3):
15.0.2 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 15" /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
1.8.0_311 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
위에서 기본으로 설정하고 싶은 버전을 선택하면
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_292`
을 사용하거나, 다음과 같이 메이저 버전을 지정할 수 있다.
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
그런 다음 java -version
을 실행하면 다음과 같은 결과를 볼 수 있다.
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
터미널의 init file에 export JAVA_HOME…
행을 추가한다.
$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
.zshrc
파일을 업데이트해줘야 한다.
$ nano ~/.zshrc
// 파일의 마지막 줄에 작성 후 변경사항 저장
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)
CTRL + X
를 통해 에디터를 나가고, Y
키를 눌러 변경사항을 저장한다.
$ source ~/.zshrc
$ echo $JAVA_HOME
$ java -version
만약 이렇게 했는데도 java -version
과 javac -version
이 일치하지 않는다면
$ cd /Library/Java/JavaVirtualMachines
위 경로로 가서 ls
를 실행하여 모든 파일의 리스트를 확인한다.
그러면 적용하고자 했던 자바 버전의 폴더 이외에 다른 폴더들이 있을텐데 지우고자 하는 폴더가 jdk1.8.0_20.jdk이라면 sudo rm -rf jdk1.8.0_20.jdk
을 통해 해당 폴더를 삭제한다.
이제 java -version
과 javac -version
의 결과가 일치할 것이다.
방법 2
openjdk 최신 버전 설치
$ brew install --cask adoptopenjdk
특정 버전 설치 방법
1. 아래의 링크 혹은 테이블에서 원하는 버전 확인
https://github.com/AdoptOpenJDK/homebrew-openjdk
Java Version | JDK | JRE |
---|---|---|
Latest OpenJDK with Hotspot JVM | adoptopenjdk |
adoptopenjdk-jre |
Latest OpenJDK with OpenJ9 JVM | adoptopenjdk-openj9 |
adoptopenjdk-openj9-jre |
OpenJDK8 with Hotspot JVM | adoptopenjdk8 |
adoptopenjdk8-jre |
OpenJDK8 with OpenJ9 JVM | adoptopenjdk8-openj9 |
adoptopenjdk8-openj9-jre |
OpenJDK9 with Hotspot JVM | adoptopenjdk9 |
n/a |
OpenJDK10 with Hotspot JVM | adoptopenjdk10 |
n/a |
OpenJDK11 with Hotspot JVM | adoptopenjdk11 |
adoptopenjdk11-jre |
OpenJDK11 with OpenJ9 JVM | adoptopenjdk11-openj9 |
adoptopenjdk11-openj9-jre |
OpenJDK12 with Hotspot JVM | adoptopenjdk12 |
adoptopenjdk12-jre |
OpenJDK12 with OpenJ9 JVM | adoptopenjdk12-openj9 |
adoptopenjdk12-openj9-jre |
OpenJDK13 with Hotspot JVM | adoptopenjdk13 |
adoptopenjdk13-jre |
OpenJDK13 with OpenJ9 JVM | adoptopenjdk13-openj9 |
adoptopenjdk13-openj9-jre |
OpenJDK14 with Hotspot JVM | adoptopenjdk14 |
adoptopenjdk14-jre |
OpenJDK14 with OpenJ9 JVM | adoptopenjdk14-openj9 |
adoptopenjdk14-openj9-jre |
OpenJDK15 with Hotspot JVM | adoptopenjdk15 |
adoptopenjdk15-jre |
OpenJDK15 with OpenJ9 JVM | adoptopenjdk15-openj9 |
adoptopenjdk15-openj9-jre |
OpenJDK16 with Hotspot JVM | adoptopenjdk16 |
adoptopenjdk16-jre |
OpenJDK16 with OpenJ9 JVM | adoptopenjdk16-openj9 |
adoptopenjdk16-openj9-jre |
2. 저장소 연결
$ brew tap AdoptOpenJDK/openjdk
3. 특정 버전 설치
$ brew install --cask adoptopenjdk15
4. 설치 확인
$ ls -ll /Library/Java/JavaVirtualMachines
total 0
drwxr-xr-x 3 root wheel 96 1 22 2021 adoptopenjdk-15.jdk
drwxr-xr-x 3 root wheel 96 4 21 2021 adoptopenjdk-8.jdk
drwxr-xr-x@ 3 june admin 96 11 27 18:14 adoptopenjdk-9.jdk
drwxr-xr-x 3 root wheel 96 11 26 07:39 jdk1.8.0_311.jdk
jenv로 자바 버전 변경을 쉽게 하기
1. jenv 설치
$ brew install jenv
2. jenv 설정
// jenv 설정 zshrc 에 추가
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
// zshrc에 설정 적용
$ source ~/.zshrc
3. jenv에 설치한 자바 버전 추가
$ jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
openjdk64-15.0.2 added
15.0.2 added
15.0 added
4. jenv에 추가되었는지 확인
// 현재 사용 중인 버전에 * 표시가 추가됨
$ jenv versions
system
1.8
1.8.0.292
15
15.0
15.0.2
* openjdk64-1.8.0.292
openjdk64-15.0.2 (set by /Users/june/.jenv/version)
5. 자바 버전 변경
$ jenv global openjdk64-15.0.2
6. 버전이 정상적으로 적용된 것을 확인
$ java -version
openjdk version "15.0.2" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.2+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.2+7, mixed mode, sharing)
※ 참고
특정 자바 버전 설치 경로 확인
$ /usr/libexec/java_home -v 15
/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
설치한 자바 목록과 설치 경로 확인
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
15.0.2 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 15" /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
References
'Java' 카테고리의 다른 글
[Java] fail-fast vs weakly consistent iterator (0) | 2021.12.20 |
---|---|
[Java] String, StringBuilder, StringBuffer의 차이점 (0) | 2021.12.17 |
[Java] 문자열 연결 연산 "+"의 내부 구현 (1) | 2021.11.29 |