macOS安装配置openJDK11

本文最初发表在我的博客,欢迎访问原文地址:

blog.favorstack.io


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

示例系统版本:

$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G103

一 下载oracle openjdk11

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设置为默认,而只配置一个快速切换方式,完整配置参见文末。

你可以选择以下任意一种方式来使当前配置生效:

  • 新打开一个shell窗口或标签页 或者,
  • 执行命令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需要管理员权限。从上面的安装过程可以看到,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

注意

  1. 执行上述删除命令需小心,不要手抖。
  2. 切勿尝试删除或更改/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"

(完)


本文最初发表在我的博客,欢迎访问原文地址:

blog.favorstack.io


你可能感兴趣的:(JavaEE)