这两天为了玩spring4.x, 要安装jdk8. 因此本文将总结下Mac上同时安装jdk6,jdk7,jdk8的方法。
安装目录
1. MAC自带JDK6, 安装目录在:/System/Library/Java/JavaVirtualMachines/
dingdong@dingdongdeMacBook-Air ~$ cd /System/Library/Java/JavaVirtualMachines/
dingdong@dingdongdeMacBook-Air JavaVirtualMachines$ ls
1.6.0.jdk
2. 用户自己安装JDK都默认安装到目录:/Library/Java/JavaVirtualMachines/
dingdong@dingdongdeMacBook-Air JavaVirtualMachines$ cd /Library/Java/JavaVirtualMachines/
dingdong@dingdongdeMacBook-Air JavaVirtualMachines$ ls
jdk1.7.0_67.jdk jdk1.8.0_45.jdk
环境变量设置
1. Mac系统的环境变量加载顺序为:/etc/profile -> /etc/paths -> ~/.bash_profile -> ~/.bash_login -> ~/.profile (~/.bashrc)
系统启动的时候会加载/etc/profile和/etc/paths两个系统配置文件,然后会依次读~/.bash_profile ~/.bash_login ~/.profile,如果前面的文件存在,后面的文件将会被忽略。
然而~/.bashrc例外,它在bash shell打开的时候会被加载。
通常配置用户环境变量的时候都在~/.bash_profile或者~/.bashrc里面。
本文的例子在~/.bash_profile中做配置。
2. 如果你的系统版本是Mac OSX 10.5 及以上的版本,Apple推荐使用$(/usr/libexec/java_home)来设置环境变量,例子如下:
1) 显示所有jdk版本:/usr/libexec/java_home -V
--------------------------------------------------------------------------------------------------------------------------------------------------------
dingdong@dingdongdeMacBook-Air ~$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
1.8.0_45, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
1.7.0_67, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home
1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
--------------------------------------------------------------------------------------------------------------------------------------------------------
2) 在我的机器(air 10.9.4)上默认查找最新的版本: /usr/libexec/java_home
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dingdong@dingdongdeMacBook-Air ~$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------java -version的原理:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dingdong@dingdongdeMacBook-Air ~$ which java
/usr/bin/java
dingdong@dingdongdeMacBook-Air ~$ ls -al /usr/bin/java
lrwxr-xr-x 1 root wheel 74 9 12 2014 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其实当用户在shell中输入java -version的时候,会执行'/usr/bin/java'这个链接文件,如上图所示,通过实际的指向的java去查找版本号,读者可以命令行里输入:
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 查看下它的参数。
我的配置文件如下:
-----------------------------------------------------------------------------------
export JAVA_6_HOME=$(/usr/libexec/java_home -v1.6)
export JAVA_7_HOME=$(/usr/libexec/java_home -v1.7)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_HOME=$JAVA_7_HOME
alias jdk6="export JAVA_HOME=$JAVA_6_HOME"
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"
------------------------------------------------------------------------------------我默认配置为jdk7
配置好保存文件,然后 source ~/.bash_profile 让配置文件生效。然后打开shell,可以自由切换jdk版本了:
大功告成!
PS: 如果你的系统版本是Mac OSX 10.5以前的,可以用jdk具体版本的绝对路径来代替:$(/usr/libexec/java_home -v 1.x).
参考资料:
1. http://stackoverflow.com/questions/1348842/what-should-i-set-java-home-to-on-osx
2. http://www.tuicool.com/articles/uUJjEb
3. http://www.flakor.cn/2014-09-14-714.html
4. http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/