如何在 Mac 上完整移除 Java(繁中)

🌏 Read the English version

Table of Contents

為什麼需要移除 Java?

Oracle Java 在 macOS 上的安裝會在系統多個位置留下檔案,包括系統層級的框架、瀏覽器外掛、偏好設定面板等。以下情況您可能需要完整移除 Java:

  • 版本衝突:不同專案需要不同 JDK 版本,造成環境混亂
  • 安全性考量:舊版 Java 存在已知漏洞,建議移除後安裝最新版
  • 系統清理:不再使用 Java 相關開發工具,釋放磁碟空間
  • 重新安裝:解決損壞的 Java 安裝問題
  • 改用 OpenJDK:從 Oracle JDK 遷移至開源版本

本文提供完整的移除步驟,適用於 macOS Monterey (12.x)、Ventura (13.x)、Sonoma (14.x),並支援 Intel 與 Apple Silicon (M1/M2/M3) Mac

準備工作

1. 確認應用程式相依性

在移除 Java 前,請先確認哪些應用程式依賴 JRE 或 JDK:

常見依賴 Java 的應用程式:

  • IDE 開發工具:IntelliJ IDEA、Eclipse、NetBeans、Android Studio
  • 建置工具:Apache Maven、Gradle、Ant
  • 伺服器軟體:Apache Tomcat、JBoss、GlassFish
  • 資料庫工具:SQL Developer、DBeaver(若使用 JDBC 連線)
  • 其他工具:Minecraft(Java Edition)、一些科學計算軟體

檢查當前安裝的 Java 版本:

# 查看當前使用的 Java 版本
java -version

# 查看所有已安裝的 Java 版本
/usr/libexec/java_home -V

# 輸出範例:
# Matching Java Virtual Machines (3):
#     17.0.9 (arm64) "Oracle Corporation" - "Java SE 17.0.9"
#     11.0.21 (arm64) "Oracle Corporation" - "Java SE 11.0.21"
#     1.8.0_391 (arm64) "Oracle Corporation" - "Java SE 8"

2. 關閉相關程序

執行移除前請確保:

  • 關閉所有瀏覽器(特別是使用 Java Applet 的網站)
  • 退出所有 Java 應用程式(IDE、伺服器、資料庫工具)
  • 停止依賴 JVM 的背景服務

檢查是否有 Java 程序在執行:

# 查看所有 Java 程序
ps aux | grep java

# 如需強制終止 Java 程序
killall java

3. 系統備份

強烈建議使用 Time Machine 建立系統快照,以便需要時還原。若您使用的是 Apple Silicon Mac (M1/M2/M3),某些應用程式可能對 Java 環境有特殊要求。

移除步驟

第一步:開啟 Terminal

開啟 Terminal 的方式:

  • 前往 應用程式 > 工具程式 > 終端機
  • 或使用 Spotlight:按下 ⌘ + Space,輸入 Terminal
  • 或使用 Launchpad 搜尋「終端機」

第二步:移除系統層級元件

以下指令將移除 Oracle Java 的所有系統元件。每個指令都需要管理員權限(sudo),系統會提示輸入密碼。

# 移除瀏覽器 Java 外掛
sudo rm -rf /Library/Internet Plug-Ins/JavaAppletPlugin.plugin
sudo rm -rf /Library/Internet Plug-Ins/Java*

# 移除 Java 框架與函式庫
sudo rm -rf /Library/Java*

# 移除系統偏好設定面板
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane

# 移除 Java 輔助工具(若存在)
sudo rm -rf /Library/Application Support/Oracle/Java

路徑說明:

  • /Library/Internet Plug-Ins/ – 瀏覽器外掛位置
  • /Library/Java* – Java 框架與執行環境(包括 JavaVirtualMachines)
  • /Library/PreferencePanes/ – 系統偏好設定面板
  • /Library/Application Support/Oracle/ – Oracle Java 輔助檔案

第三步:移除特定版本的 JDK(可選)

若您只想移除特定版本的 Java,而保留其他版本:

# 1. 查看已安裝的 Java 版本與路徑
/usr/libexec/java_home -V

# 2. 移除特定版本(依據上述輸出的路徑)
# Java 8 範例
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_391.jdk

# Java 11 範例
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-11.0.21.jdk

# Java 17 範例
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.0.9.jdk

# Java 21 範例(最新 LTS 版本)
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-21.0.1.jdk

注意:Apple Silicon Mac (M1/M2/M3) 上的 JDK 路徑名稱會包含 arm64 標記,但實際目錄名稱通常不含此標記。

第四步:清理使用者層級檔案

移除當前使用者目錄下的 Java 支援檔案:

# 移除使用者層級的 Java 應用程式支援檔案
sudo rm -rf ~/Library/Application Support/Java

# 移除 Java 快取
sudo rm -rf ~/Library/Caches/Java

# 移除 Java 偏好設定
sudo rm -rf ~/Library/Preferences/com.oracle.java.*

# 移除 Java 日誌檔案(若存在)
sudo rm -rf ~/Library/Logs/Java

# 移除舊版 Java Web Start 檔案(macOS 10.14 之前)
sudo rm -rf ~/Library/Application Support/Oracle/Java/Deployment

第五步:清理環境變數(重要)

檢查並移除 Shell 設定檔中的 Java 相關環境變數:

# 檢查 .zshrc(macOS Catalina 10.15 之後預設 Shell)
cat ~/.zshrc | grep -i java

# 檢查 .bash_profile(macOS Mojave 10.14 之前)
cat ~/.bash_profile | grep -i java

# 若發現 JAVA_HOME 或 PATH 設定,使用編輯器移除
nano ~/.zshrc   # 或 nano ~/.bash_profile

需要移除的常見環境變數設定:

# 移除這些行(若存在)
export JAVA_HOME=$(/usr/libexec/java_home)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-XX.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

移除後,重新載入 Shell 設定:

# 重新載入設定檔
source ~/.zshrc   # 或 source ~/.bash_profile

# 驗證 JAVA_HOME 已清除
echo $JAVA_HOME
# 應該輸出空白

第六步:輸入管理員密碼

執行 sudo 指令時,系統會提示輸入管理員密碼。注意:

  • 密碼輸入時不會顯示任何字元(包括星號或圓點)
  • 這是 Unix 系統的正常安全機制
  • 輸入完畢後按 Enter 確認
  • 若輸入錯誤,系統會提示重新輸入

驗證移除結果

方法一:檢查 Java 指令

在 Terminal 執行:

java -version

預期結果(移除成功):

zsh: command not found: java

出現此訊息表示移除成功。若仍顯示 Java 版本資訊,可能是:

  • 尚有其他 Java 版本未移除
  • 安裝了多個 JDK 管理工具(如 SDKMAN!、jEnv)
  • 環境變數未清除

方法二:檢查系統偏好設定

  1. 開啟「系統設定」(macOS Ventura 13.x+)或「系統偏好設定」(Monterey 12.x 及之前)
  2. 確認「Java」面板已消失
  3. 若仍存在,表示系統偏好面板未正確移除

方法三:檢查檔案系統

確認關鍵目錄已不存在:

# 檢查 Java 框架目錄
ls /Library/Java 2>/dev/null || echo "✓ Java 目錄不存在(正常)"

# 檢查 JDK 安裝目錄
ls /Library/Java/JavaVirtualMachines 2>/dev/null || echo "✓ JDK 目錄不存在(正常)"

# 檢查瀏覽器外掛
ls /Library/Internet Plug-Ins/ | grep -i java || echo "✓ 無 Java 外掛(正常)"

# 檢查偏好設定面板
ls /Library/PreferencePanes/ | grep -i java || echo "✓ 無 Java 偏好面板(正常)"

方法四:檢查環境變數

# 檢查 JAVA_HOME
echo $JAVA_HOME
# 應該輸出空白

# 檢查 PATH 中是否仍有 Java 路徑
echo $PATH | grep -i java || echo "✓ PATH 中無 Java 路徑(正常)"

重新安裝 Java(若需要)

1. Oracle JDK(官方商業版本)

適用場景:

  • 需要 Oracle 官方技術支援
  • 企業專案要求使用 Oracle JDK
  • 需要特定 Oracle 專有功能

安裝步驟:

  1. 前往 Oracle JDK 下載頁面
  2. 選擇適合的版本(建議 Java 21 LTS 或 Java 17 LTS)
  3. 下載 .dmg 安裝檔(選擇 ARM64 版本若使用 M1/M2/M3 Mac)
  4. 開啟 .dmg 並依指示安裝

注意:Oracle JDK 從 Java 11 開始採用商業授權,生產環境使用需付費。

2. OpenJDK(開源免費版本)

適用場景:

  • 個人開發專案
  • 不需要 Oracle 商業支援
  • 偏好開源解決方案

使用 Homebrew 安裝(推薦):

# 安裝 Homebrew(若尚未安裝)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安裝 OpenJDK(最新版本)
brew install openjdk

# 安裝特定版本
brew install openjdk@17  # Java 17 LTS
brew install openjdk@11  # Java 11 LTS

# 建立符號連結(讓 macOS 系統識別)
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

# Apple Silicon Mac 路徑為 /opt/homebrew
# Intel Mac 路徑為 /usr/local

3. Azul Zulu(企業級 OpenJDK 發行版)

什麼是 Azul Zulu?

Azul Zulu 是由 Azul Systems 提供的企業級 OpenJDK 發行版,完全基於 OpenJDK 原始碼構建,並通過 Java TCK (Technology Compatibility Kit) 認證,確保與 Java SE 標準完全相容。

Azul Systems 公司背景:

  • 成立於 2002 年,專注於 Java 運行時技術
  • 為全球超過 3,000 家企業提供 Java 解決方案
  • OpenJDK 專案的主要貢獻者之一
  • 提供從 Java 6 至 Java 21+ 的完整支援

為什麼選擇 Azul Zulu?

核心優勢:

  1. 完全免費:無需商業授權,可用於生產環境
  2. 長期支援(LTS):提供比 Oracle 更長的免費支援週期
  3. Apple Silicon 原生最佳化:專為 M1/M2/M3 晶片優化的 ARM64 版本
  4. 及時安全更新:通常比其他發行版更快釋出安全補丁
  5. 跨平台一致性:Windows、macOS、Linux 行為一致
  6. 100% 開源:基於 OpenJDK,無專有擴展
  7. TCK 認證:確保完全符合 Java SE 規範

與 Oracle JDK 的差異:

比較項目 Azul Zulu Oracle JDK
授權 GPL v2 + Classpath(完全免費) 商業授權(生產環境需付費)
生產環境使用 ✅ 無限制免費使用 ❌ Java 11+ 需付費
LTS 支援期 Java 8: 至 2030+
Java 11: 至 2027+
Java 17: 至 2029+
付費客戶專享
Apple Silicon 支援 ✅ 原生 ARM64 版本(Java 8+) ✅ Java 17+ 支援
安全更新頻率 每季度 + 緊急修補 付費客戶優先
性能 與 Oracle JDK 相當 標準基準
技術支援 社群免費 / 商業付費可選 需購買支援合約

Azul Zulu 版本選擇指南

Azul 提供多種版本以滿足不同需求:

1. Zulu Community(社群版)

  • ✅ 完全免費
  • ✅ 適用於開發與生產環境
  • ✅ 支援所有 LTS 版本(8, 11, 17, 21)
  • ✅ 定期安全更新
  • ❌ 無官方技術支援(僅社群支援)

2. Zulu Enterprise(企業版)

  • 💰 付費訂閱
  • ✅ 包含 24/7 技術支援
  • ✅ SLA 保證
  • ✅ 客製化修補程式
  • ✅ 效能分析工具

3. Zulu Prime(高性能版)

  • 💰 付費訂閱
  • ✅ 整合 Azul Platform Prime(C4 垃圾回收器)
  • ✅ 更低延遲、更高吞吐量
  • ✅ ReadyNow! 技術(快速啟動)
  • ✅ 適合高負載生產環境

推薦版本選擇:

  • 個人開發、小型專案:Zulu Community(免費)
  • 企業生產環境:Zulu Community(免費)或 Zulu Enterprise(需支援)
  • 高性能需求:Zulu Prime(金融交易、即時系統)

安裝 Azul Zulu(詳細步驟)

方法一:使用 Homebrew(推薦)

# 安裝最新版本 Zulu JDK
brew install --cask zulu

# 安裝特定版本
brew install --cask zulu@17  # Java 17 LTS
brew install --cask zulu@11  # Java 11 LTS
brew install --cask zulu@8   # Java 8 LTS

# 檢查已安裝的 Zulu 版本
/usr/libexec/java_home -V | grep -i zulu

方法二:官網下載(完整控制)

  1. 前往 Azul Downloads 頁面
  2. 選擇參數:
    • Java Version:選擇 Java 8, 11, 17, 或 21(LTS 版本)
    • Operating System:選擇 macOS
    • Architecture
      • ARM64 (M1/M2/M3 Mac)
      • x86 (Intel Mac)
    • Java Package:JDK(開發用)或 JRE(僅運行)
  3. 下載 .dmg.tar.gz 檔案
  4. 安裝 DMG:
    • 開啟 .dmg 檔案
    • 拖曳到 Applications 資料夾
    • 系統會自動安裝到 /Library/Java/JavaVirtualMachines/

方法三:使用 SDKMAN!(多版本管理)

# 查看所有可用的 Zulu 版本
sdk list java | grep zulu

# 安裝特定版本
sdk install java 21.0.1-zulu   # Java 21 LTS
sdk install java 17.0.9-zulu   # Java 17 LTS
sdk install java 11.0.21-zulu  # Java 11 LTS
sdk install java 8.0.392-zulu  # Java 8 LTS

# 設定 Zulu 為預設 JDK
sdk default java 17.0.9-zulu

# 查看當前使用的版本
java -version
# 輸出:openjdk version "17.0.9" 2023-10-17 LTS
#       OpenJDK Runtime Environment Zulu17.46+19-CA (build 17.0.9+8-LTS)

方法四:手動安裝(進階)

# 下載 tar.gz 版本
cd ~/Downloads
curl -O https://cdn.azul.com/zulu/bin/zulu17.46.19-ca-jdk17.0.9-macosx_aarch64.tar.gz

# 解壓縮
tar -xzf zulu17.46.19-ca-jdk17.0.9-macosx_aarch64.tar.gz

# 移動到系統 JDK 目錄
sudo mv zulu17.46.19-ca-jdk17.0.9-macosx_aarch64.jdk /Library/Java/JavaVirtualMachines/

# 驗證安裝
/usr/libexec/java_home -V

設定 Azul Zulu 為預設 JDK

# 1. 找出 Zulu JDK 的 JAVA_HOME 路徑
/usr/libexec/java_home -V | grep -i zulu
# 範例輸出:17.0.9 (arm64) "Azul Systems, Inc." - "Zulu 17.46.19" /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home

# 2. 設定環境變數(編輯 ~/.zshrc 或 ~/.bash_profile)
nano ~/.zshrc

# 3. 加入以下內容
export JAVA_HOME=$(/usr/libexec/java_home -v 17)  # 使用版本號
# 或指定完整路徑
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

# 4. 重新載入設定
source ~/.zshrc

# 5. 驗證設定
echo $JAVA_HOME
java -version

Azul Zulu 性能優化特性

Apple Silicon 最佳化:

  • 原生 ARM64 編譯:無需 Rosetta 2 轉譯
  • SIMD 向量化:充分利用 ARM Neon 指令集
  • 記憶體管理最佳化:針對 Apple 統一記憶體架構調整
  • 功耗效率:相較於 Rosetta 2 模式可節省 30-40% 電力

效能測試(Apple M1 Max,Java 17):

# 執行 JMH 基準測試
java -jar jmh-benchmarks.jar

# 結果範例(與 Oracle JDK ARM64 比較):
# Benchmark                    Zulu ARM64    Oracle ARM64
# StringConcatBenchmark        5234 ops/s    5198 ops/s
# ArraySortBenchmark           8921 ops/s    8856 ops/s
# JsonParseBenchmark           4532 ops/s    4501 ops/s
# 結論:性能幾乎相同,差異在誤差範圍內

驗證 Azul Zulu 安裝

# 檢查 Java 版本
java -version
# 應顯示類似:
# openjdk version "17.0.9" 2023-10-17 LTS
# OpenJDK Runtime Environment Zulu17.46+19-CA (build 17.0.9+8-LTS)
# OpenJDK 64-Bit Server VM Zulu17.46+19-CA (build 17.0.9+8-LTS, mixed mode, sharing)

# 檢查 JAVA_HOME
echo $JAVA_HOME
# /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home

# 檢查編譯器版本
javac -version
# javac 17.0.9

# 執行簡單測試
java -XX:+PrintCommandLineFlags -version
# 查看 JVM 啟動參數

Azul Zulu 授權與支援

授權說明:

  • Zulu Community:GPL v2 + Classpath Exception
    • ✅ 可自由使用、修改、分發
    • ✅ 可用於商業軟體開發
    • ✅ 無需支付授權費
    • ✅ 無使用限制

免費支援資源:

付費支援方案(可選):

  • Zulu Enterprise Support
    • 24/7 技術支援
    • SLA 保證(2-4 小時回應)
    • 安全漏洞優先修補
    • 效能調校建議
    • 價格:依企業規模與需求報價

常見問題:Azul Zulu

Q:Azul Zulu 與 Oracle JDK 功能相同嗎?
A:核心功能完全相同(基於同一份 OpenJDK 原始碼),差異在於:

  • Oracle JDK 包含一些專有工具(Flight Recorder、Mission Control)
  • Zulu 完全開源,無專有擴展
  • 兩者效能表現幾乎相同

Q:Azul Zulu 可以用於生產環境嗎?
A:可以!Zulu Community 完全免費且通過 TCK 認證,許多知名企業使用:

  • LinkedIn、Twitter、Netflix 等科技公司
  • 金融機構、政府單位
  • 全球超過 100,000 個生產部署

Q:如何更新 Azul Zulu?
A:

# 若使用 Homebrew 安裝
brew upgrade --cask zulu

# 若使用 SDKMAN!
sdk upgrade java

# 或從官網下載最新版本重新安裝

Q:Zulu 支援哪些 macOS 版本?
A:

  • macOS 10.13 High Sierra 及更新版本
  • 完整支援 Monterey (12.x)、Ventura (13.x)、Sonoma (14.x)
  • Intel 與 Apple Silicon 皆支援

何時選擇 Azul Zulu?

✅ 適合使用 Azul Zulu 的情境:

  • 需要免費的生產級 JDK
  • 使用 Apple Silicon Mac 進行開發
  • 需要長期穩定支援(LTS 版本)
  • 跨平台專案(Windows/macOS/Linux 一致性)
  • 不想被 Oracle 授權條款限制
  • 需要及時的安全更新

❌ 可能不適合的情境:

  • 公司政策強制使用 Oracle JDK
  • 專案依賴 Oracle 專有工具(如舊版 Java Mission Control)
  • 需要 Oracle 官方技術支援合約

實際使用範例

範例一:Spring Boot 專案開發

# 安裝 Zulu 17(Spring Boot 3.x 需要)
brew install --cask zulu@17

# 驗證版本
java -version

# 執行 Spring Boot 應用
./mvnw spring-boot:run

# 打包為 JAR
./mvnw clean package
java -jar target/myapp.jar

範例二:Android 開發(配合 Android Studio)

# 安裝 Zulu 17(Android Studio 推薦)
brew install --cask zulu@17

# Android Studio 設定:
# Preferences → Build, Execution, Deployment → Build Tools → Gradle
# Gradle JDK:選擇 /Library/Java/JavaVirtualMachines/zulu-17.jdk

# 建置 Android 專案
./gradlew assembleDebug

範例三:IntelliJ IDEA 整合

# IntelliJ IDEA 設定:
# File → Project Structure → SDKs → Add JDK
# 選擇:/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home

# 或使用自動偵測:
# IntelliJ 會自動偵測系統已安裝的 Zulu JDK

總結:Azul Zulu 優勢

Azul Zulu 是 macOS 上的優秀 JDK 選擇,特別適合:

  • Apple Silicon Mac 使用者:原生 ARM64 效能最佳化
  • 企業開發團隊:免費、穩定、長期支援
  • 開源專案:完全符合 OpenJDK 標準,無授權疑慮
  • 專業開發者:性能與 Oracle JDK 相當,但完全免費

快速開始指令:

# 安裝 Azul Zulu 17 LTS
brew install --cask zulu@17

# 設定為預設 JDK
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.zshrc
source ~/.zshrc

# 驗證安裝
java -version

4. SDKMAN!(Java 版本管理工具)

適用場景:

  • 需要管理多個 Java 版本
  • 不同專案需要不同 JDK 版本
  • 頻繁切換 Java 環境
# 1. 安裝 SDKMAN!
curl -s "https://get.sdkman.io" | bash

# 2. 重新載入 Shell
source ~/.sdkman/bin/sdkman-init.sh

# 3. 查看可用的 Java 版本
sdk list java

# 4. 安裝特定版本
sdk install java 17.0.9-tem      # Temurin (Eclipse 基金會)
sdk install java 21.0.1-open     # OpenJDK
sdk install java 17.0.9-zulu     # Azul Zulu

# 5. 設定預設版本
sdk default java 17.0.9-tem

# 6. 切換版本(當前 Terminal 視窗)
sdk use java 21.0.1-open

5. jEnv(另一種版本管理工具)

# 安裝 jEnv
brew install jenv

# 設定 Shell(加入 .zshrc 或 .bash_profile)
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
source ~/.zshrc

# 加入已安裝的 Java 版本
jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

# 設定全域預設版本
jenv global 17.0

# 設定專案特定版本(在專案目錄執行)
jenv local 11.0

使用替代工具移除 Java

AppCleaner(免費圖形介面工具)

優點:

  • 自動偵測關聯檔案
  • 視覺化介面,適合不熟悉 Terminal 的使用者
  • 可列出所有相關元件

使用步驟:

  1. 下載 AppCleaner(免費)
  2. 開啟 AppCleaner,拖曳 Java 相關應用程式到視窗
  3. 勾選所有關聯檔案
  4. 點擊「刪除」

限制:可能無法移除所有系統層級元件,建議搭配手動 Terminal 指令。

CleanMyMac X(付費專業工具)

優點:

  • 深度掃描系統檔案
  • 一鍵清理快取與偏好設定
  • 支援完整的應用程式移除

使用步驟:

  1. 開啟 CleanMyMac X
  2. 選擇「解除安裝程式」
  3. 搜尋「Java」並選擇所有相關項目
  4. 點擊「解除安裝」

疑難排解

問題一:執行指令後出現「Operation not permitted」

原因:macOS 的系統完整性保護(SIP)阻擋刪除系統保護檔案。

解決方法:

  1. 確認您刪除的是 /Library/(系統層級)而非 /System/Library/(系統保護)
  2. Java 標準安裝位置在 /Library/,不應觸發 SIP
  3. 若確實需要調整 SIP,請謹慎操作並參考 Apple 官方文件

問題二:移除後某些應用程式無法開啟

原因:該應用程式依賴 Java Runtime Environment。

解決方法:

  1. 重新安裝適合的 Java 版本
  2. 檢查應用程式官方文件,確認需要的 Java 版本
  3. 考慮使用 SDKMAN! 安裝多個版本並切換

問題三:Terminal 顯示「Permission denied」

原因:忘記使用 sudo

解決方法:

# 錯誤示範
rm -rf /Library/Java*

# 正確示範
sudo rm -rf /Library/Java*

問題四:Apple Silicon Mac 無法執行某些 Java 應用程式

原因:應用程式不支援 ARM64 架構。

解決方法:

  1. 安裝 ARM64 原生版本的 JDK(Azul Zulu、Temurin、Oracle JDK 17+ 都有支援)
  2. 或使用 Rosetta 2 執行 x86_64 版本(效能較差)
  3. 檢查應用程式官方是否提供 Apple Silicon 版本

問題五:java -version 仍顯示版本資訊

可能原因:

  • 安裝了多個 JDK(透過 Homebrew、SDKMAN!、手動安裝)
  • 環境變數 JAVA_HOMEPATH 仍指向舊路徑
  • 使用了 JDK 版本管理工具(jEnv、SDKMAN!)

檢查步驟:

# 查看 java 指令的實際路徑
which java
# 可能輸出 /usr/bin/java 或 /opt/homebrew/bin/java

# 查看所有 Java 安裝
/usr/libexec/java_home -V

# 檢查 SDKMAN!
sdk current java

# 檢查 jEnv
jenv version

常見問題(FAQ)

Q1:為什麼需要使用 sudo?

sudo (Super User DO) 讓您以系統管理員身份執行指令。Java 元件安裝在系統保護的目錄中(如 /Library/),需要管理員權限才能刪除。

安全提示:僅在信任的指令前使用 sudo,並確認指令正確性。

Q2:刪除 Java 會影響其他程式嗎?

不會影響的程式:

  • macOS 原生應用程式(Safari、Mail、Finder 等)
  • 大部分第三方應用程式(Chrome、Slack、Notion 等)

可能受影響的程式:

  • Java 開發工具(IntelliJ IDEA、Eclipse、NetBeans)
  • 需要 JVM 的應用程式(Minecraft Java Edition、一些科學計算軟體)
  • 使用 Java Applet 的舊網站(已幾乎絕跡)

建議:移除前使用「活動監視器」或 ps aux | grep java 檢查是否有依賴 Java 的程序。

Q3:如何只移除特定版本的 Java?

# 1. 查看已安裝的 Java 版本
/usr/libexec/java_home -V

# 輸出範例:
# Matching Java Virtual Machines (3):
#     17.0.9 (arm64) "/Library/Java/JavaVirtualMachines/jdk-17.0.9.jdk/Contents/Home"
#     11.0.21 (arm64) "/Library/Java/JavaVirtualMachines/jdk-11.0.21.jdk/Contents/Home"
#     1.8.0_391 (arm64) "/Library/Java/JavaVirtualMachines/jdk1.8.0_391.jdk/Contents/Home"

# 2. 移除特定版本(例如移除 Java 8,保留 11 和 17)
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_391.jdk

# 3. 驗證移除結果
/usr/libexec/java_home -V
# 現在應該只顯示 Java 17 和 11

Q4:移除後系統出現錯誤怎麼辦?

情境一:應用程式無法啟動

  1. 檢查應用程式錯誤訊息,確認是否因缺少 Java
  2. 重新安裝適合的 Java 版本(參考應用程式官方文件)
  3. 使用 SDKMAN! 或 jEnv 管理版本

情境二:需要還原 Java

# 從 Time Machine 還原(若有備份)
# 或重新下載安裝 JDK

# 快速安裝 OpenJDK
brew install openjdk
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

Q5:Oracle JDK 與 OpenJDK 有什麼差別?

比較項目 Oracle JDK OpenJDK
授權 商業授權(生產環境需付費) GPL v2 + Classpath Exception(完全免費)
功能 包含額外商業功能(Java Flight Recorder、Java Mission Control) 核心功能完全相同
更新頻率 付費客戶享長期支援(LTS) 社群驅動更新
效能 幾乎相同 幾乎相同
適用場景 企業專案、需要官方技術支援 個人開發、開源專案、一般企業應用

建議:除非有特殊需求,一般開發者使用 OpenJDK 即可。

Q6:M1/M2/M3 Mac 使用 Java 有什麼注意事項?

  • 使用 ARM64 原生版本:Oracle JDK 17+、Azul Zulu、Temurin 都有提供
  • 避免使用舊版 JDK:Java 8 在 Apple Silicon 上可能需要透過 Rosetta 2 執行
  • Homebrew 路徑差異:Apple Silicon 使用 /opt/homebrew,Intel 使用 /usr/local
  • 檢查應用程式相容性:某些 Java 應用程式可能尚未支援 ARM64

總結

透過本文步驟,可完整移除 macOS 上的 Oracle Java 或 OpenJDK。完整流程包括:

  • ✅ 移除瀏覽器外掛與系統框架
  • ✅ 清理偏好設定與使用者檔案
  • ✅ 移除環境變數設定
  • ✅ 驗證移除結果
  • ✅ 選擇適合的重新安裝方案

建議的 Java 環境管理最佳實踐:

  1. 使用 SDKMAN!jEnv 管理多個 Java 版本
  2. 優先選擇 OpenJDKAzul Zulu(免費且支援良好)
  3. Apple Silicon Mac 使用 ARM64 原生版本提升效能
  4. 定期更新 JDK 以獲得安全性修補
  5. 不同專案使用不同 JDK 版本時,善用版本管理工具

若日後需要 Java 環境,建議使用 Homebrew 或 SDKMAN! 進行安裝與版本管理,避免手動管理多個 JDK 版本造成的衝突與混亂。


測試環境: macOS Monterey 12.x, Ventura 13.x, Sonoma 14.x(Intel & Apple Silicon)
最後更新: 2025-01-15

相關文章

Leave a Comment