本文最初发表在我的博客,欢迎访问原文地址:
blog.favorstack.io
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
。
(完)
本文最初发表在我的博客,欢迎访问原文地址: