1. brew로 설치 가능한 JDK 리스트 확인
brew search jdk
2. jdk 설치 (openjdk@17)
brew install openjdk@17
3. 심볼릭 링크 적용
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjd
k-17. jdk
4. java 정보 확인
java --version
버전이 출력되었고 이상 없다고 생각했지만 openjdk@17을 설치했는데 왜 24 버전이 나오는지 확인이 필요하였다.
다시 터미널을 확인했더니 설치 완료 후 안내문구가 나온 걸 확인했다.
For the system Java wrappers to find this JDK, symlink it with
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjd
k-17. jdk
openjdk@17 is keg-only, which means it was not symlinked into /opt/homebrew, because this is an alternate version of another formula.
If you need to have openjdk@17 first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH" ' >> ~/.zshrc
For compilers to find openjdk@17 you may need to set: export CPPFLAGS="-I/opt/homebrew/opt/openjdk@17/include"
💡 해결 방법
위에 안내내용이 이해가 잘 안돼서 구글링 + chat을 통해서 조금 이해하고 해결한 내용이다.
1. 심볼릭 링크는 이미 진행한 상태로 환경 변수 설정 진행
// 1. 내 로컬의 쉘 확인 /bin/zsh or /bin/bash
echo $SHELL // /bin/zsh
// 2. CLI를 통해 zsh의 설정 파일 진입
vi ~/.zshrc
// 3. JAVA 환경변수 설정
export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"
export CPPFLAGS="-I/opt/homebrew/opt/openjdk@17/include"
// 4. 환경변수 저장
source ~/.zshrc
// 5. 자바 버전 확인
java --version
안내 문구로 나온 걸 번역하면 keg 전용이므로 /opt/homebrew로 동기화되지 않았습니다.라고 하는데 설치는 하되, /usr/local/bin 같은 전역 경로에 자동으로 연결해두지 않는다는 의미를 가지고 있다.
그 이유는 버전 충돌 방지 때문인데 자바의 경우 여러버전이 존재하는데 이걸 전부 /usr/local/bin/java로 자동 연결해 버리면 충돌이 발생한다. 그래서 brew는 사용자가 직접 어떤 버전을 사용할지 선택할 수 있도록 설치만 진행한다. 그래서 keg-only 된 버전을 사용하려면 이렇게 직접 경로를 설정해야 하고 이를 환경변수에 적용해 주면 되는 것이다.
🎈참고로 M칩, 인텔 둘 다 설치해 봤는데 M은 심볼릭 링크 부분에서 이슈가 없었지만 인텔은 이슈 발생으로 해당 이슈 정리해 뒀으니 참고하기
[오류] The operation couldn’t be completed. Unable to locate a Java Runtime.Please visit http://www.java.com for information
🔎 brew로 openJDK설치 후 버전 확인java --version ⛔️ 오류 에러발생.. 아니 집에서 할 때는 이슈가 없었는데 왜.......? 구글링 검색을 통해 여러 참고사이트를 확인했고환경변수를 적용 안 한 게 생
soly-log.tistory.com
'JAVA' 카테고리의 다른 글
정보은닉과 setter, getter 개념정리 (0) | 2025.06.27 |
---|---|
[JAVA] 접근 제어자와 패키지, 클래스 접근법 개념정리 (1) | 2025.06.27 |
메서드의 오버로딩과 정적바인딩 개념정리 (1) | 2025.06.24 |
생성자와 this 개념정리 (2) | 2025.06.24 |
클래스와 객체, 그리고 객체 생성 개념정리 (4) | 2025.06.24 |