Oracle JDK 通常是安装程序,可以直接安装,故可以直接跳过下列1,2,3步骤,后续配置方法与OpenJDK一致。

0. 系统版本

$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14
BuildVersion: 18A391

1. 下载oracle openjdk11

wget https://download.java.net/java/ga/jdk11/openjdk-11_osx-x64_bin.tar.gz

2. 解压到自定义目录

# 创建指定目录,自定义
mkdir -p /usr/local/custom/JavaVirtualMachines && cd !$
# 解压
tar xvf openjdk-11_osx-x64_bin.tar.gz

3. 链接到标准目录中

cd /Library/Java/JavaVirtualMachines
sudo ln -shf /usr/local/custom/JavaVirtualMachines/jdk-11.jdk jdk-11.jdk

4. 检查

执行/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_161, x86_64:    "Java SE 8"    /Library/Java/JavaVirtualMachines/jdk1.8.0_161.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

5. 快速切换配置

vi ~/.bash_profile 增加如下内容:

JAVA_11_HOME=`/usr/libexec/java_home -v 11*`
# 默认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"
这里有一个细节,我只将$JAVA_HOME配置为全局变量,而并没有将$JAVA_11_HOME配置为全局变量

由于我默认使用JDK1.8,所以这里不将JDK11设置为默认,而只配置快速切换方式。
你可以选择以下任意一种方式来使当前配置生效:

  • 新打开一个shell窗口或标签页
  • 执行命令source ~/.bash_profile
  • 执行命令. ~/.bash_profile

后续可以直接输入jdk11来切换到openjdk11

6.快速切换检查

执行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/<command>下的命令,并传递剩余的参数。选择要使用哪个$JAVA_HOME的任何参数必须在--exec选项之前。

-V or --verbose
打印匹配的JVMs和架构到标准错误(stderr

示例:
bash风格的shells:

$ export JAVA_HOME=`/usr/libexec/java_home`

csh风格的shells:

% setenv JAVA_HOME `/usr/libexec/java_home`

更多细节可以参考man java_home

(完)

文章目录