Mac OS 上设置 JAVA_HOME

先看一张图:

may@MaydeMacBook-Pro /System/Library/Frameworks/JavaVM.framework $  ls -al
total 64
drwxr-xr-x   12 root  wheel   408 12  3 19:42 .
drwxr-xr-x  127 root  wheel  4318 11 11 13:08 ..
lrwxr-xr-x    1 root  wheel    27 11 11 14:27 Classes -> Versions/CurrentJDK/Classes
lrwxr-xr-x    1 root  wheel    28 11 11 14:27 Commands -> Versions/CurrentJDK/Commands
lrwxr-xr-x    1 root  wheel    27 11 11 14:27 Frameworks -> Versions/Current/Frameworks
lrwxr-xr-x    1 root  wheel    24 12  3 18:44 Headers -> Versions/Current/Headers
lrwxr-xr-x    1 root  wheel    24 11 11 14:27 Home -> Versions/CurrentJDK/Home
lrwxr-xr-x    1 root  wheel    23 11 11 14:27 JavaVM -> Versions/Current/JavaVM
lrwxr-xr-x    1 root  wheel    29 11 11 14:27 Libraries -> Versions/CurrentJDK/Libraries
lrwxr-xr-x    1 root  wheel    26 11 11 14:27 Resources -> Versions/Current/Resources
drwxr-xr-x   11 root  wheel   374 11 11 14:27 Versions
-rw-r--r--    1 root  wheel   104  9 10 07:05 module.map


may@MaydeMacBook-Pro /System/Library/Frameworks/JavaVM.framework/Versions $  ls
1.4        1.4.2      1.5        1.5.0      1.6        1.6.0      A          Current    CurrentJDK

may@MaydeMacBook-Pro /System/Library/Frameworks/JavaVM.framework/Versions $  ls
1.4        1.4.2      1.5        1.5.0      1.6        1.6.0      A          Current    CurrentJDK

may@MaydeMacBook-Pro /System/Library/Frameworks/JavaVM.framework/Versions $  ls -al
total 64
drwxr-xr-x  11 root  wheel  374 11 11 14:27 .
drwxr-xr-x  12 root  wheel  408 12  3 19:42 ..
lrwxr-xr-x   1 root  wheel   10 11 11 14:27 1.4 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 11 11 14:27 1.4.2 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 11 11 14:27 1.5 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 11 11 14:27 1.5.0 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 11 11 14:27 1.6 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 11 11 14:27 1.6.0 -> CurrentJDK
drwxr-xr-x   8 root  wheel  272 12  3 19:42 A
lrwxr-xr-x   1 root  wheel    1 11 11 14:27 Current -> A
lrwxr-xr-x   1 root  wheel   59 11 11 14:27 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

may@MaydeMacBook-Pro /Library/Java $  ls -al
total 8
drwxrwxr-x   5 root  wheel   170 12 19 13:43 .
drwxr-xr-x+ 63 root  wheel  2142 12  3 19:42 ..
drwxrwxr-x   2 root  wheel    68 11 11 14:27 Extensions
lrwxr-xr-x   1 root  wheel    48 11 11 14:27 Home -> /System/Library/Frameworks/JavaVM.framework/Home
drwxr-xr-x   3 root  wheel   102 12 19 13:43 JavaVirtualMachines


所以,以下普遍存在的设置方式都只能指向系统默认的jdk home,即苹果提供的 Java 6:

JAVA_HOME=/Library/Java/Home
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
#上面的几个目录其实是等价的链接关系,都指向的是苹果提供的 Java 6

/System/Library/Frameworks/JavaVM.framework/Versions/ 下有多个不同版本的目录,但它们链接的都是 CurrentJDK 目录。总之,这些Java都是苹果提供的Java,Oracle 或 OpenJDK 提供的 Java 不在此目录中。

因为不同的 Java 版本和不同的 Java 实现可能安装在了不同的目录下,所以使用硬编码的目录会有如下缺点:

  • 安装或升级新的 Java 后需要重新设置 JAVA_HOME(尤其是带版本号的目录)

  • 无法适应不同的 Java 实现(Apple和Oracle的)

一点历史:过去 Mac 上的 Java 都是由 Apple 自己提供的,只支持到 Java 6,并且OS X 10.7 开始系统并不自带(而是可选安装)。后来 Apple 加入 OpenJDK 继续支持 Java 6,而 Java 7 将由 Oracle 负责提供。

根据苹果的官方说明,Mac OS X 10.5 及以后的版本应该使用/usr/libexec/java_home 命令来确定 JAVA_HOME ,而在此之前的版本由于没有这个命令,则应该使用固定的 /Library/Java/Home 目录。


最佳方式是:

export JAVA_HOME=`/usr/libexec/java_home`

另外,你还可以这样用,来选择不同的Java版本:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
#or :
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

安装完 Oracle Java 7后 java_home 命令的各种输出结果是:

默认或指定1.7的输出:
/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home

/usr/libexec/java_home -v 1.6 的输出:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home


一些补充说明:

Java 7 需要 Mac OS X 10.7.3 (Lion) 及以上版本才能安装。

在浏览器中运行Java要求是64位浏览器,所以不支持Chrome, Safari 或 Firefox 没问题。

更多内容,比如“如何卸载”、“卸载 Oracle Java 7 后如何还原 Apple Java 6”等,请参考下面这些参考资料:

  • 苹果官方说明

  • java_home 命令手册

  • Mac OS X Platform Install FAQ

  • Mac Java 7 FAQ:安装,删除,还原,配置,系统请求


参考:http://han.guokai.blog.163.com/blog/static/136718271201301183938165/

你可能感兴趣的:(Mac OS 上设置 JAVA_HOME)