# Mac 上解除安裝 Java，別弄壞工具鏈

> 別動系統 stub，先盤點已安裝的 JDK，並確認還有哪些東西依賴你準備移除的 runtime

Published: 2026-08-08

「在 Mac 上解除安裝 Java」裡藏著兩個問題，答錯了，工具鏈就會壞掉。第一個是你裝了哪一種 Java。第二個是機器上還有什麼指望它在。

Oracle 自己的說明很短，其中最重要的那一行不是步驟，而是警告：有個目錄別去動。

## 不要從 /usr/bin 移除 Java

Oracle 直接寫明：不要試圖用刪除 `/usr/bin` 裡的 Java 工具來解除安裝 Java。那個目錄屬於系統軟體的一部分，任何更動都會在下次 macOS 更新時被 Apple 還原。

這是最常見的搞砸方式。輸入 `which java` 會回傳 `/usr/bin` 底下的路徑，看起來像答案，其實不是。在 macOS 上那些是指向實際已安裝 runtime 的 stub。刪掉它們只是拿掉路標，不是拆掉建築，而且 macOS 之後還會再放回去。

## 先搞清楚要移除的是哪一種 Java

Runtime 與開發套件是不同的安裝，移除方式也不同。

Oracle JRE（帶瀏覽器外掛與偏好設定面板的消費者 runtime）存在 Oracle 點名的三處：

```
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin
/Library/PreferencePanes/JavaControlPanel.prefPane
~/Library/Application Support/Oracle/Java
```

JDK 是另一回事，安裝在 `/Library/Java/JavaVirtualMachines/` 底下，移除需要管理員權限。你可以同時裝好幾套，這很正常，而且常常是刻意的。

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/java-runtimes-and-stubs.webp" width="1360" height="454" loading="lazy" alt="系統目錄裡的命令列 stub 指向安裝在 Library Java Virtual Machines 底下的 JDK，而 Oracle runtime 外掛與偏好設定面板是另一套安裝。">
  <figcaption>系統目錄裡的指令是指標，不是 runtime。移除 JDK 才是拿掉真正的安裝；只刪指標只會弄斷路標，而 macOS 會再把它們放回去。</figcaption>
</figure>

先列出實際已安裝的內容再決定：

```
/usr/libexec/java_home -V
```

這會印出系統知道的每一個 JDK，含版本與路徑。清單只有一筆，選擇就很單純。若有四筆，下一節就很重要。

## 移除錯的 JDK 會弄壞其他軟體

Java 很少是為了自己而裝。Android 工具鏈、Elasticsearch、Minecraft 啟動器、JetBrains IDE、Apache 工具，以及若干企業 VPN 與列印用戶端，都內附或依賴 JVM。有些自帶一份，不受影響。有些解析系統提供的版本，一變就停工。

若 JDK 是用套件管理器裝的，就用同一個方式移除。Homebrew 安裝的 temurin 用 `brew uninstall` 拿掉；手動抽走檔案會讓套件資料庫仍以為它還在。

## 用支援的方式移除 JDK

對從 `.pkg` 安裝的 JDK，移除對象是 `/Library/Java/JavaVirtualMachines/` 底下名稱帶版本號的那個目錄，而且需要 `sudo`。一次移除一個版本，確認對你重要的工具都還正常，再動下一個。

完成後，`/usr/libexec/java_home -V` 不應再列出它，而你在 shell profile 裡手動設的任何 `JAVA_HOME` 現在會指到空處。那個變數是「清乾淨後工具鏈卻失敗」的第二常見原因。

## 關掉終端機之前先檢查

```
/usr/libexec/java_home -V
java -version
```

第一條顯示還剩什麼。第二條要嘛回報版本，要嘛告訴你沒有已安裝的 runtime；在你本來就要清乾淨的機器上，那是正確答案，不是錯誤。

## 佔用空間總覽在哪裡有用

Java 的殘留又小、又散、又無聊：快取、偏好設定、一個外掛、一個偏好設定面板。真正有意思的是盤點，而終端機已經給你了。若你想一次看到某個 JDK、或內附 JDK 的應用程式的整片佔用，每項帶大小，[Mole](https://mole.fit/zh/) 不用你事先知道路徑就能做到。

## 之後要檢查的三個地方

第一個是 shell 設定檔。寫在 `~/.zshrc` 或
`~/.zprofile` 裡的手寫 `JAVA_HOME`，不會跟著 JDK 一起消失。它會繼續指向一個已經不存在的路徑，每個新開啟的 shell 都會繼承這個壞掉的變數。刪掉那一行，或改成 `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` 解除安裝；手動刪資料夾會讓套件資料庫仍以為它們還在。

---

Canonical HTML page: https://mole.fit/tw/blog/how-to-uninstall-java-mac
Blog index for agents: https://mole.fit/tw/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
