도구 체인을 유지한 채 Mac에서 Java 제거하기
"Mac에서 Java 제거" 안에는 질문 두 가지가 숨어 있고, 둘 중 하나를 잘못 다루면 도구 체인이 깨집니다. 첫째는 어떤 Java가 있는지입니다. 둘째는 이 기기에서 그 Java를 필요로 하는 다른 프로그램이 무엇인지입니다.
Oracle 자체 안내는 짧고, 그중 가장 중요한 내용은 단계가 아니라 건드리지 말아야 할 디렉터리에 대한 경고입니다.
/usr/bin에서 Java를 지우지 마세요
Oracle은 직접 말합니다. /usr/bin에서 Java 도구를 지워 Java를 제거하려 하지 말라는 것입니다. 그 디렉터리는 시스템 소프트웨어의 일부이며, 변경 사항은 다음 macOS 업데이트 때 Apple이 되돌립니다.
가장 흔히 실수하는 지점입니다. which java를 치면 /usr/bin 아래 경로가 나와 정답처럼 보이지만 그렇지 않습니다. macOS에서 그것은 실제로 설치된 런타임을 가리키는 스텁입니다. 지워도 건물이 아니라 이정표만 사라지고, macOS가 나중에 어차피 복구합니다.
지우려는 Java가 무엇인지 알기
런타임과 개발 키트는 설치도 제거도 다릅니다.
브라우저 플러그인과 환경설정 패널이 있는 소비자용 런타임인 Oracle JRE는 Oracle이 명시한 세 곳에 있습니다.
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
/Library/PreferencePanes/JavaControlPanel.prefPane
~/Library/Application Support/Oracle/Java
JDK는 별개이며 /Library/Java/JavaVirtualMachines/ 아래에 설치되고, 제거에는 관리자 권한이 필요합니다. 여러 개를 나란히 둘 수 있으며, 이는 정상이고 종종 의도된 구성입니다.
결정하기 전에 실제로 설치된 것을 나열하세요.
/usr/libexec/java_home -V
시스템이 아는 모든 JDK를 버전과 경로와 함께 출력합니다. 목록에 항목이 하나면 선택이 단순합니다. 네 개라면 다음 절이 중요합니다.
잘못된 JDK를 지우면 다른 소프트웨어가 깨집니다
Java는 그 자체만으로 설치되는 경우가 드뭅니다. Android 도구, Elasticsearch, Minecraft 런처, JetBrains IDE, Apache 도구, 일부 기업용 VPN 및 인쇄 클라이언트는 모두 JVM을 포함하거나 의존합니다. 자체 복사본을 포함한 쪽은 영향이 없습니다. 시스템이 제공하는 Java를 참조하는 쪽은 바뀌면 동작이 멈춥니다.
패키지 관리자로 설치한 JDK는 설치한 방식 그대로 제거하세요. Homebrew로 설치한 temurin은 brew uninstall로 제거하고, 파일을 손으로 지우면 패키지 데이터베이스에는 여전히 설치된 것으로 남습니다.
지원되는 방식으로 JDK 제거하기
.pkg로 설치한 JDK는 /Library/Java/JavaVirtualMachines/ 아래 이름에 버전이 들어간 디렉터리를 지우면 되고, sudo가 필요합니다. 한 버전에 한 번 제거하고, 다음을 지우기 전에 중요한 도구를 확인하세요.
이후 /usr/libexec/java_home -V에 더 이상 나오지 않아야 하며, 셸 프로필에 손으로 넣은 JAVA_HOME은 이제 아무것도 가리키지 않습니다. 그 변수는 깨끗이 제거한 뒤에도 도구 체인이 실패하는 두 번째로 흔한 원인입니다.
터미널을 닫기 전에 확인하기
/usr/libexec/java_home -V
java -version
첫 번째는 남은 것을 보여 줍니다. 두 번째는 버전을 보고하거나 런타임이 설치되어 있지 않다고 알리며, Java를 없애려던 기기에서는 오류가 아니라 올바른 결과입니다.
흔적 확인이 도움이 되는 경우
Java 잔여는 용량이 작고 흩어져 있으며 눈에 잘 띄지 않습니다. 캐시, 환경설정, 플러그인, 환경설정 패널입니다. 중요한 것은 목록이며, 터미널로 이미 확인할 수 있습니다. JDK 전체 흔적이나 자체 JDK를 포함한 앱의 흔적을 용량과 함께 한 목록으로 보고 싶다면, Mole은 경로를 미리 알 필요 없이 그렇게 해 줍니다.
이후에 확인할 세 곳
첫 번째는 셸 프로필입니다. ~/.zshrc나
~/.zprofile에 직접 적어 둔 JAVA_HOME은 JDK를 지워도 함께 사라지지 않습니다. 더 이상 존재하지 않는 경로를 계속
가리키고, 새로 연 셸마다 깨진 변수를 물려받습니다. 해당 줄을 지우거나
export JAVA_HOME=$(/usr/libexec/java_home)으로 바꿔 시스템에 있는 JDK를
따라가도록 하세요.
두 번째는 IDE입니다. JetBrains 도구와 Android Studio는 프로젝트마다 특정 JDK 경로를 기록해 두며 시스템 변경을 따라가지 않습니다. 그 결과 명령줄에서는 문제없는데 특정 프로젝트만 빌드에 실패하는 현상이 나타납니다.
세 번째는 패키지 관리자로 설치한 항목입니다.
brew list | grep -i -E 'jdk|temurin|zulu|openjdk'로 Homebrew에서 들어온 항목을 확인할 수 있습니다.
제거는 brew uninstall로 하세요. 디렉터리를 수동으로 지우면
패키지 데이터베이스는 여전히 설치된 것으로 남습니다.