2021-05-12 14:32:11
如何在 OS X 中使用多個版本JDK
2020-06-16 17:36:41
升級macbook小白的硬碟成SSD後,重新安裝了系統和JDK8,但是啟動eclipse還是報告需要安裝JDK6,於是也按照提示安裝了Apple JDK6,這導致系統中有兩個JDK,一個是Oracle的JDK8,另外一個Apple的JDK6,混亂開始了。
在命令列執行java -version,提示是JDK8,好像一切正常,但執行 mvm clean install 卻發現maven使用了JDK6!迷惑了,這是怎麼回事呢?
———————— 華麗的分割線 ————————
原來 OSX 上的Java安裝路徑分兩派,一是Apple派,另外一個是Oracle派。
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
Ubuntu 14.04安裝JDK1.8.0_25與設定環境變數 http://www.linuxidc.com/Linux/2015-01/112030.htm
CentOS 搭建JDK環境 http://www.linuxidc.com/Linux/2015-06/118879.htm
Ubuntu 14.04安裝JDK1.8.0_25與設定環境變數 http://www.linuxidc.com/Linux/2015-01/112030.htm
Ubuntu 14.04 LTS安裝Oracle JDK 1.8 http://www.linuxidc.com/Linux/2014-11/109216.htm
CentOS6.3安裝JDK和環境設定 http://www.linuxidc.com/Linux/2012-09/70780.htm
Ubuntu 14.04 安裝 JDK8 http://www.linuxidc.com/Linux/2014-09/106218.htm
Ubuntu下安裝JDK圖文解析 http://www.linuxidc.com/Linux/2014-09/107291.htm
相關文章