TechTalk

MAC下切换java版本的方法

字数统计: 606阅读时长: 2 min
2019/01/19

mac下默认的JDK1.8通过如下方法获得

1
2
3
4
5
6
#/usr/libexec/java_home -V

Matching Java Virtual Machines (1):
1.8.0_172, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

当你将Oracle JDK11(例如jdk-11.0.5)或其他其他JDK放入文件夹/Library/Java/JavaVirtualMachines/jdk11xxx后,,这是java_home的输出是这样的:

1
2
3
4
5
6
7
#/usr/libexec/java_home -V

Matching Java Virtual Machines (2):
11.0.5, x86_64: "Java SE 11.0.5" /Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home
1.8.0_172, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

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

系统默认使用最高版本的JDK:
1
2
3
4
#java -version
java version "11.0.5" 2019-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.5+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode)

有时候我们希望默认使用低版本的JDK,而是在某个工程中使用高版本的JDK,这时候要怎么办,

将JDK 11 Home路径下的Info.plist改名为info.plist.disabled,然后java_home显示JDK 11不被找到,并全局使用JDK 1.8

1
2
3
4
5
6
#/usr/libexec/jenv -V

Matching Java Virtual Machines (2):
1.8.0_172, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

再此之后,我们该怎么使用JDK11呢,需要不停的修改不同版本的JDK的info.plist文件,这样会很麻烦。

一个简洁的办法是通过jenv管理本地的JDK版本。

jenv可以控制全局、文件夹、shell会话的JDK版本。通过brew可以安装jenv:brew install jenv
全局设置: jenv global xxx
文件夹设置:jenv local xxx
shell会话设置:jenv sh-shell xxx
显示当前使用的版本: jenv version
显示所有系统jdk版本:jenv versions

然后按照https://www.jenv.be/ 下介绍的步骤修改zsh或者bash的rc文件,这里以zsh为例:

1
2
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc

然后通过jenv add 来将JDK的版本到jenv中:
1
2
3
4
5
6
7
8
9
10
11
12
#jenv add  /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
#jenv add /Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home

#jenv versions

system (set by /Users/james/.jenv/version)
1.8
1.8.0.172
11.0
11.0.5
oracle64-1.8.0.172
oracle64-11.0.5

如果某个工程需要使用不同版本的JDK,例如全局为JDK1.8,而某个工程使用JDK 11,那么在该工程文件夹下:

1
#jenv local 11.0 

如果该工程是maven工程还需要(很重要):

1
#jenv enalbe-plugin maven

CATALOG