使用jenv管理多个JDK版本

简介

很多时候,我们需要在不同的项目中使用不同的jdk版本,
比如很多古早的项目还在使用jdk1.8,(该升升,该发发,我用java8),
而新的项目可能已经升级到jdk17或者jdk22,
Mac下的jenv可以帮助我们管理不同的jdk版本。

安装

1
brew install jenv

配置

这里个人习惯使用一个~/.profile文件,
把所有常用的环境变量配置放在这个文件里面,
然后再分别在~/.bash_profile~/.zshrc文件里面引入~/.profile
这样无论你切换成bash还是zsh,都可以使用~/.profile里面的配置,
当然直接放到~/.bash_profile或者~/.zshrc文件里面也是可以的。

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

安装jdk

从Oracle官网下载dmg或者pkg安装包之后,双击安装即可,
安装完成之后,jdk会被安装到/Library/Java/JavaVirtualMachines/目录下
也可以使用其他安装方式,比如直接下载tar.gz包,解压到指定目录。
或者使用homebrew安装

使用

`

查看已安装的jdk版本

1
2
3
4
5
6
7
8
9
10
11
12
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (9):
22.0.2 (arm64) "Oracle Corporation" - "Java SE 22.0.2" /Library/Java/JavaVirtualMachines/jdk-22.jdk/Contents/Home
22 (arm64) "Homebrew" - "OpenJDK 22" /opt/homebrew/Cellar/openjdk/22/libexec/openjdk.jdk/Contents/Home
21.0.4 (arm64) "Oracle Corporation" - "Java SE 21.0.4" /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
20.0.2 (arm64) "Oracle Corporation" - "OpenJDK 20.0.2" /Users/yiny/Library/Java/JavaVirtualMachines/openjdk-20.0.2/Contents/Home
19.0.2 (arm64) "Oracle Corporation" - "Java SE 19.0.2" /Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home
17.0.12 (arm64) "Oracle Corporation" - "Java SE 17.0.12" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
17.0.6 (arm64) "Eclipse Adoptium" - "OpenJDK 17.0.6" /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
1.8.421.09 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_361 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-22.jdk/Contents/Home

添加jdk版本至jenv

1
2
3
4
5
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk-22.jdk/Contents/Home

查看当前jenv中已安装的jdk版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ jenv versions
system
1.8
1.8.0.361
17
17.0
17.0.12
19
21
21.0
21.0.4
* 22 (set by /Users/yiny/.jenv/version)
22.0
22.0.2

设置全局jdk版本

1
2
3
4
5
6
7
8
9
$ jenv global <version>
# 比如
$ jenv global 1.8.0.361
$ jenv global 22

$ java -version  ✔
java version "22.0.2" 2024-07-16
Java(TM) SE Runtime Environment (build 22.0.2+9-70)
Java HotSpot(TM) 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing)

设置当前shell的jdk版本

1
2
3
$ jenv shell <version>
# 比如
$ jenv shell 21

设置当前目录的jdk版本

1
$ jenv shell local <version>