本文最初发表在我的博客,欢迎访问原文地址:
Mac 下,Oracle JDK 通常是安装程序,可以直接安装,故可以直接跳过下列1,2,3步骤,后续配置方法与OpenJDK一致。
示例系统版本:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G103
wget https://download.java.net/java/ga/jdk11/openjdk-11_osx-x64_bin.tar.gz
# 创建指定目录,自定义
mkdir -p /usr/local/custom/JavaVirtualMachines && cd !$
# 解压
tar xvf openjdk-11_osx-x64_bin.tar.gz
cd /Library/Java/JavaVirtualMachines
sudo ln -shf /usr/local/custom/JavaVirtualMachines/jdk-11.jdk jdk-11.jdk
执行/usr/libexec/java_home -V
查看系统已安装的JDK,如下,其中第一条即为我们新配置的openjdk 11:
Matching Java Virtual Machines (3):
11, x86_64: “OpenJDK 11” /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
1.8.0_201, x86_64: “Java SE 8” /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
1.7.0_80, x86_64: “Java SE 7” /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
vi ~/.bash_profile
增加如下内容:
JAVA_11_HOME=`/usr/libexec/java_home -v 11*`
# 默认JDK,如果你希望该版本为默认使用的JDK,
# 或你的系统中只有这一个JDK,请去掉下面一行的注释:
# export JAVA_HOME=$JAVA_11_HOME
alias jdk11="export JAVA_HOME=$JAVA_11_HOME && echo current JDK has switched to openjdk version 11. && java -version"
这里有一个细节,由于我默认使用JDK1.8,所以这里没有将JDK11设置为默认,而只配置一个快速切换方式,完整配置参见文末。
你可以选择以下任意一种方式来使当前配置生效:
source ~/.bash_profile
或者,. ~/.bash_profile
后续可以直接输入jdk11
来切换到openjdk11
执行jdk11
来切换到jdk11,
检查当前版本是否切换成功:
$ jdk11
current JDK has switched to openjdk version 11.
openjdk version “11” 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
说明:
这里用到了/usr/libexec/java_home
命令,其他版本的JDK也可以使用该命令来配置,以达到多版本并存,快速切换的效果,简单说一下用法。
该命令是Mac下配置$JAVA_HOME
变量的工具,包含若干个条件过滤器,可以按照版本,架构,数据模型等进行过滤匹配适合的JVM,用法如下:
语法:/usr/libexec/java_home [options]
常用的几个选项说明如下:
-v 或 –version version
按照"JVMVersion"中的主版本号进行过滤,支持通配,如"1.8+"
,"1.8*"
,"11"
等。
-a 或 –arch architecture
按照支持的架构进行过滤,如"i386"
, "x86_64"
, or "ppc"
。
-d 或 –datamodel datamodel
按照32位或64位模式进行过滤,支持的数据模型有"-d32"
和 "-d64"
-F 或 –failfast
未匹配到合适的JVM时,直接返回,不再打印默认的$JAVA_HOME
–exec command …
执行$JAVA_HOME/bin/
下的命令,并传递剩余的参数。选择要使用哪个$JAVA_HOME
的任何参数必须在--exec
选项之前。
-V or --verbose
打印匹配的JVMs和架构到标准错误(stderr
)(按版本大小由高到低排列)
2019-10-17 更新:
需要注意的是,上述几个过滤选项参数如-v
、-d
等,只会输出匹配到的第一个结果。比如你安装了两个版本的Java8,但是次版本号不同,它只会输出较高的那个版本(参见-V
选项),目的是保证输出结果可用。
示例:
bash风格的shells:
$ export JAVA_HOME=`/usr/libexec/java_home`
csh风格的shells:
% setenv JAVA_HOME `/usr/libexec/java_home`
如果不想使用该版本了,可以卸载,卸载JDK需要管理员权限。从上面的安装过程可以看到,JDK被安装到了这个位置:/Library/Java/JavaVirtualMachines
,找到你想删除的版本,直接将该目录下的链接和对应实际安装目录删除即可:
# 删除链接文件
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-11.jdk
# 删除实际解压的文件目录
$ rm -rf /usr/local/custom/JavaVirtualMachines/jdk-11.jdk
oracle JDK目录命名格式形如
/Library/Java/JavaVirtualMachines/jdkmajor.minor.macro[_update].jdk
注意
/usr/bin
目录下任何关于Java的命令,该目录是操作系统的一部分。附:
完整的多JDK版本配置(~/.bash_profile):
# JDK Settings
JAVA_7_HOME=`/usr/libexec/java_home -v 1.7*`
JAVA_8_HOME=`/usr/libexec/java_home -v 1.8*`
JAVA_11_HOME=`/usr/libexec/java_home -v 11*`
# My default JDK is jdk1.8
export JAVA_HOME=$JAVA_8_HOME
alias jdk7="export JAVA_HOME=$JAVA_7_HOME && echo current JDK has switched to oracle jdk version 1.7. && java -version"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME && echo current JDK has switched to oracle jdk version 1.8. && java -version"
alias jdk11="export JAVA_HOME=$JAVA_11_HOME && echo current JDK has switched to openjdk version 11. && java -version"
本文最初发表在我的博客,欢迎访问原文地址: