升級macbook小白的硬盤成SSD後,從新安裝了系統和JDK8,可是啓動eclipse仍是報告須要安裝JDK6,因而也按照提示安裝了Apple JDK6,這致使系統中有兩個JDK,一個是Oracle的JDK8,另一個Apple的JDK6,混亂開始了。
在命令行執行java -version,提示是JDK8,好像一切正常,但執行 mvm clean install 卻發現maven使用了JDK6!迷惑了,這是怎麼回事呢?
———————— 華麗的分割線 ————————
原來 OSX 上的Java安裝路徑分兩派,一是Apple派,另一個是Oracle派。java
Oracle派將JDK安裝到 /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents 目錄;
Apple派將JDK安裝到
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents 目錄;
系統默認的JDK版本,是經過 link 來實現的,也就是說java程序如maven、eclispe選擇哪一個派別的JDK是經過各自的啓動腳本,按照約定的link文件去查找java程序的。好比 maven 就會先找Apple的JDK後找Orale的JDK。
Apple派的JDK,支持多版本,怎麼支持呢?很簡單,就是把文件 /System/Library/Frameworks/JavaVM.framework/Versions/
CurrentJDK link 到某個版本的JDK 就行了。
Oracle派的JDK也支持多版本,他是怎麼實現的呢?原來也學Apple同樣,經過 link 到不一樣版本的JDK安裝路徑來實現,Oracle 的 link 文件是 /System/Library/Frameworks/JavaVM.framework/Versions/
Current。
怎麼解決以前碰到的 maven 使用 Apple 的JDK6,而不會用最新的Oralce JDK8 的問題呢?
先看下maven的啓動腳本,原來不少java框架,會給開發者一個機會,去優先指定你使用的JDK目錄,好比maven就會先查看是否JAVA_HOME有設定,若是有設定就使用設定的jdk路徑,不然纔去找Apple的缺省JDK,最後找Oracle的默認JDK。因而解決方案就是:設定JAVA_HOME環境變量到 Oracle JDK8的安裝目錄。
具體命令以下:
編輯 ~/.bash_profile,添加下面行
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
附錄:
若是要修改 eclipse 啓動時使用的 JDK,能夠這樣:
編輯 eclipse_kepler/Eclipse.app/Contents/MacOS 中的 eclipse.ini,加入下面兩行
-vm
/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/bin/java