為什麼你的 java -version 老是錯?——淺談 javapath 陷阱

| Java | 3 Reads

1. 問題場景

很多開發者在 Windows 上安裝了多個 JDK / JRE,辛辛苦苦設好 JAVA_HOMEPATH,卻發現:

java -version

依然顯示舊的 JRE 版本,例如:

java version "1.8.0_181"

即使 JAVA_HOME 已經指向 JDK 17 或其他版本,也沒有用。這是為什麼?


2. 真兇:javapath

打開 CMD 輸入:

where java

你很可能會看到類似結果:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe
C:\Program Files\Java\jdk1.7.0_80\bin\java.exe
C:\Windows\System32\java.exe

第一行的 javapath 就是罪魁禍首。

什麼是 javapath

  • 這是一個 Oracle JRE 安裝程式自動建立的資料夾

  • 裡面放了三個檔案(其實是 符號連結 / shortcut):

    • java.exe

    • javaw.exe

    • javaws.exe

  • 這些檔案會指向你當時安裝的某個 JRE(例如 JRE 1.8.0_181)。

更重要的是,安裝程式還會 把這個路徑加到 PATH 的最前面
→ 所以 CMD 總是先命中 javapath → 永遠跑出那個固定版本。


3. 為什麼可以刪掉?

因為它只是 Oracle 預設放的一個「全域捷徑」,目的是方便普通用戶隨便在 CMD 裡跑 Java。

對於開發者來說,它反而會干擾版本管理。移除完全不會影響系統,只會讓 java 命令按照你自己設定的 %JAVA_HOME%\bin 來走。


4. 正確修復方式

臨時修復(只在當前 CMD 視窗有效):

set "JAVA_HOME=C:\Program Files\Java\jdk-17"
set "PATH=%JAVA_HOME%\bin;%PATH%"
java -version

永久修復(推薦):

  1. 打開 系統環境變數 → 編輯 PATH。

  2. 刪掉或移到最後:

    C:\Program Files (x86)\Common Files\Oracle\Java\javapath
    
  3. 確認 %JAVA_HOME%\bin 在 PATH 最前面

  4. 新開 CMD,再次檢查:

    where java
    java -version
    javac -version
    

5. 常見補充問題

  • Q: C:\Windows\System32\java.exe 也有?
    → 那通常是其他軟體亂放的副本,可以檢查來源,不需要的話建議刪掉。

  • Q: 刪掉 javapath 會不會導致程式跑不了?
    → 不會,只要 PATH 裡有你需要的 JDK/bin 即可。

  • Q: 我想切換不同版本的 JDK 怎麼辦?
    → 建議使用 JabbaSDKMAN!(在 Linux/macOS 上),或手動設置多個批處理檔來切換 JAVA_HOME。


6. 結論

javapath 是 Oracle JRE 安裝程式留下的「全域捷徑」,經常導致 java -version 顯示錯誤版本。

👉 對開發者而言,直接刪掉或移除 PATH 裡的 javapath,只保留正確的 %JAVA_HOME%\bin,才能真正掌握自己用的是哪個 JDK。

This article was last edited at