JUINTINATION
Mac OS 자바 버전 여러 개 관리하기 본문
그동안 스퍼트 프로젝트를 진행하느라 Express.js만 열심히 하면서 VS Code만 열심히 열었는데 스프링 부트를 써야 할 일이 생겨서 미리 감도 찾을 겸 오랜만에 IntelliJ를 열었다. 예전에 자바 공부할 때 사용한 프로젝트, 스프링 공부할 때 사용했던 프로젝트 등등을 제외한 여러 똥 프로젝트를 지워가면서 여유롭게 추억에 잠겨있었다. 이제 시작해볼까 했는데 문제가 생겼다.
나는 지금까지 Java 11 버전으로만 프로젝트를 진행해서 jdk 17 버전이 따로 설치되어 있지 않은데 spring initializr에 Java 11을 지원하지 않는 것이다. 예전에 혼자 스프링 공부할 때만 하더라도 지원했는데 시간이 지나면서 사라진 것 같다.
그래서 IntelliJ에서 스프링 프로젝트를 생성하려고 했다. 그런데..
IntelliJ에서도 Java 11의 스프링 프로젝트를 생성할 수 없는 것이다.. 나는 멘붕에 빠졌다. 그래서 여러 개의 Java 버전을 관리할 수 있도록 구글링을 시작했다. 맥북을 구매하고 자바를 설치한지 너무 오래돼서 처음에 어떻게 설치했는지 기억이 전혀 나지 않아서 여러 블로그에서 확인하라는 $ vi ~/.zshrc
명령어를 입력했을 때 export JAVA_HOME
과 관련된 내용은 그 어디에도 적혀있지 않았다. 그러면 지금까지 나는 어떻게 맥북으로 자바를 이용했던 것일까.. $ brew list
명령어를 실행해서 adoptopenjdk11
이 설치된 것을 확인하고 검색해보니 adoptopenjdk로 jdk를 설치하면 자동으로 환경변수까지 바꿔준다는 것 같았다. 사실 나도 정확히는 모르겠다. 아무튼 그렇구나 하고 IntelliJ에서 다음과 같이 aarch64의 jdk 17을 설치했었다.
여기서 또 문제.. 이전 프로젝트에서 쓰던 jdk 11을 찾을 수 없는 것이었다. 급한대로 $ brew uninstall adoptopenjdk11
명령어를 실행해서 삭제한 후에 $ brew install adoptopenjdk11
명령어를 실행해서 재설치하려고 했다. 그런데 다음과 같은 오류 메시지가 발생했다.
brew install adoptopenjdk11
Error: Cask 'adoptopenjdk11' definition is invalid: 'appcast' stanza failed with: Calling the `appcast` stanza is disabled! Use the `livecheck` stanza instead.
Please report this issue to the adoptopenjdk/openjdk tap (not Homebrew/brew or Homebrew/homebrew-core), or even better, submit a PR to fix it:
/opt/homebrew/Library/Taps/adoptopenjdk/homebrew-openjdk/Casks/adoptopenjdk11.rb:9
진짜 맥북을 포맷하고 처음부터 다시 시작해볼까 고민하다가 AdoptOpenJDK 깃허브를 발견했다. 대충 temurin으로 설치하라는 내용인데 adoptopenjdk는 deprecated 되었고 temurin으로 변경됐다고 한다. 그래서 이 깃허브에서 하라는대로 무작정 시작했다.
처음에 $ brew untap adoptopenjdk/openjdk
명령어를 실행하여 기존에 사용하던 adoptopenjdk11 탭을 제거한 후에 $ brew install --cask temurin
명령어를 실행하여 temurin을 설치했다.
이후 $ brew tap homebrew/cask-versions
명령어를 실행하여 특정 temurin 버전 설치를 위한 탭을 설정하고 $ brew install --cask temurin11
로 jdk 11을 설치했다.
다행히 이전의 프로젝트들은 모두 다시 정상적으로 실행됐다. 그래서 싱글벙글 $ brew install --cask temurin17
로 jdk 17도 설치했는데.. 설치만 되는 것이 아니라 자바 버전은 17로 업데이트되었고 상황은 맨 처음의 멘붕 상태로 돌아갔다.
어찌저지 구글링을 계속하다가 jenv를 알게 되었다. jenv란 쉽게 얘기하면 여러 버전의 JAVA_HOME을 쉽게 관리할 수 있도록 해주는 툴이다. jenv를 사용하면 각 프로젝트 별 JDK 설정이 가능하다. 이 블로그를 참고하여 다음의 명령어들을 차례로 실행했다.
$ brew install jenv
# jenv의 path 설정
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ source ~/.zshrc
# 위에서 조회했던 java home 경로를 모두 jenv에 추가
$ jenv add /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
jenv를 이용하여 자바 버전을 바꿀 땐 다음의 3가지 중 하나를 선택하여 버전을 지정할 수 있다.
- global
- 전체 자바버전 변경
- local
- 해당 폴더에서만 자바버전 변경
- shell
- 해당 shell 에서만 자바버전 변경
이후 $ jenv versions
명령어를 실행하여 아래와 같이 제대로 적용됐는지 확인한다.
위에서 언급한 블로그 글에 의하면 11.0, 11.0.22, temurin64-11.0.22 이렇게 3가지는 모두 자바 버전 11로 동일한 동작이 된다.
아무튼 이후에 $ jenv gloval temurin64-11.0.22
명령어를 실행하여 기본 jdk 버전을 11로 변경하고 $ java --version
명령어와 $ /usr/libexec/java_home -V
명령어를 실행하여 다음과 같이 제대로 적용됐는지 확인했다.
이제 IntelliJ에서 jdk 17을 사용한 스프링 프로젝트를 만들 수 있는지 확인해보면 다음과 같이 정상적으로 jdk 17 버전이 인식되는 것을 확인할 수 있다.
결론
예상치 못하게 맥북의 저장공간을 청소해준 느낌이 든다. 아무튼 지금은 이거 설정하느라 시간이 너무 오래 소요돼서 테스트용 스프링 프로젝트는 생성하지 않았는데 내일이나 시간이 날 때 테스트해보고 또 다른 문제가 발생하면(...) 재빨리 해결해서 글을 수정하도록 하겠다. 이 글이 수정되는 일이 없도록 빌어야겠다.
다행히 테스트용으로 만들어보니 별 문제 없이 잘 작동하는 것을 확인했다!
'StudyNote' 카테고리의 다른 글
빌더(Builder) 패턴 (2) | 2024.04.30 |
---|---|
스프링부트 + MySQL 프로젝트 도커라이징하기 (1) | 2024.03.11 |
Express.js를 사용한 스퍼트 프로젝트 (2) | 2024.02.08 |
도커(Docker) 가볍게 입문해보기 - 4 (0) | 2024.02.03 |
간단한 Express 프로젝트 Dockerizing 해보기 (1) | 2024.02.01 |