mac管理多版本jdk

当你运行java或者 Java 程序时使用的是哪个 JDK 呢?在 OS X 下,java也就是/usr/bin/java在默认情况下指向的是已经安装的最新版本。但是你可以设置环境变量JAVA_HOME来更改其指向:

# 查看当前的java版本
$ java -version          
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

# 切换版本,可切换为第三步的本地java home中的任意一个。
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home java -version  
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)
配置命令自动切换

修改/etc/profile或者 在/.bash_profile(如果是Zsh,修改/.zshrc)文件中添加如下内容:

# JDK 6  
export JAVA_6_HOME="/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"
# JDK 8
export JAVA_8_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home"

export JAVA_HOME=$JAVA_8_HOME #默认JDK 8

#alias命令动态切换JDK版本  
alias jdk6="export JAVA_HOME=$JAVA_6_HOME"    
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"  

$ source ~/.bash_profile

说明:Mac系统的环境变量,加载顺序为:
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc

原理

当你安装 jdk 完成,进入 /Library/Java/JavaVirtualMachines 目录你会看到相应 jdk 文件夹的存在。当你安装了多版本 jdk 时,它们同时存在于这个目录下。

那么你使用的 java -version 做了什么?我们一步一步追踪

which java
/usr/bin/java

ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74  1 29  2019 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

cd /System/Library/Frameworks/JavaVM.framework/Versions
ls -l 
drwxr-xr-x  8 root  wheel  256  1 16  2019 A
lrwxr-xr-x  1 root  wheel    1  1 29  2019 Current -> A

可见苹果公司在开发 macOS 时已经内置了 jdk 版本管理的功能。它也提供了相应的 command line 工具。使用 /usr/libexec/java_home 即可直接查看当前的 $JAVA_HOME

/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.6, x86_64: "Java SE 11.0.6"    /Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home
    1.8.0_171, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home

usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk-11.0.6.jdk/Contents/Home

 /usr/libexec/java_home -v1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容