我一直在 OSX 上使用 Java 進行開發,沒有遇到幾個問題。昨天,我開始遇到奇怪的編譯器崩潰(NPE 深入 javac)。
我安裝了 JDK 1.8.0_101,但 javac 將自身報告為 1.8.0_20。
$ which javac
/usr/bin/javac
$ ls -l /usr/bin/javac
lrwxr-xr-x 1 root wheel 74 20 Sep 15:16 /usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/javac
$ /usr/libexec/java_home 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
$ echo $JAVA_HOME
Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
所以一切看起來都很棒,但:
$ javac -version
javac 1.8.0_20
有人對可能導致它選擇錯誤版本的原因有任何建議嗎?我嘗試過刪除所有 JVM,然後重新安裝、重新啟動等等。
編輯
即使從符號連結的目標運行 javac 也會報告錯誤的版本。我還確認 /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/javac 的 md5 總和與正常安裝的 md5 總和相符。
答案1
去cd /Library/Java/JavaVirtualMachines
。列出所有使用ls
.
應該有兩個資料夾jdk1.8.0_101.jdk
和jdk1.8.0_20.jdk
。進入sudo rm -rf jdk1.8.0_20.jdk
。
現在檢查 java -version 和 javac -version ,應該是相同的。