贫瘠之地

华北无浪漫,死海扬起帆
多少个夜晚,独自望着天

0%

jenv 工具使用

jenv 工具使用

SpringBoot 3 和 Spring 6 的升级对 Java 版本有了更高的要求,特别是现在基于 Spring 生态的开源仓库基本都基于新版本,所以往往需要维护多版本的 Java

IDEA 可以通过 Platform Settings 中的 SDKs 进行配置,而如果需要使用命令行如 mvn 等操作会比较麻烦,需要切换使用的 Java 版本(配置 profile 是一种思路,甚至 maven 可以实现不同的 module 使用不同的 Java 版本进行编译,如果没有这么精细化的需求在配置文件上操作我认为是有点繁琐的)

这里可以使用 jenv 工具对 Java 环境进行切换

安装 & 配置

可以参考 Github https://github.com/jenv/jenv

我使用的 homebrew 进行安装 https://formulae.brew.sh/formula/jenv#default

1
brew install jenv
1
2
3
4
To activate jenv, add the following to your shell profile e.g. ~/.profile
or ~/.zshrc:
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

安装和配置后可以运行 jenv doctor 进行检查

1
2
3
4
$ jenv doctor
[OK] No JAVA_HOME set
[OK] Java binaries in path are jenv shims
[OK] Jenv is correctly loaded

使用 jenv versions 可以查看所有的环境,刚进行安装未进行任何配置时应该会有一个默认的 system 配置,可以使用 jenv versions --verbose 查看详细信息

1
2
3
4
5
$ jenv versions --verbose

system

--> /Users/users

这里有一个坑,默认的 system 并没有准确识别当前的 Java 环境,有一个对应的 issue

https://github.com/jenv/jenv/issues/422

而对于 system 我还没找到手动配置方式,我觉得不用特别纠结,手动配置非 system 环境也不是不可以

操作

添加环境

1
jenv add alias /path/to/javaHome
  • alias 是给环境起的别名,到时切换就根据起的别名进行标识;如果不填 jenv 会默认配置别名(这里会有一个 warning,jenv 不希望使用 alias,我觉得不重要,社区现在也认为这个警告后期可能会废弃)
  • /path/to/javaHome 是 Java Home 的路径,例如 /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

查看 Java 路径

使用 /usr/libexec/java_home 可以查找并列出系统上安装的所有 Java 开发工具包(JDK)或 Java 运行时环境(JRE)的安装路径,显示所有版本中的最新版本

加上 -V 参数可以显示所有的版本

1
2
3
4
5
6
7
8
9
$ /usr/libexec/java_home -V

Matching Java Virtual Machines (5):
17.0.11 (arm64) "JetBrains s.r.o." - "JBR-17.0.11+1-1312.2-nomod 17.0.11" /Users/users/Library/Java/JavaVirtualMachines/jbr-17.0.11/Contents/Home
17.0.9 (arm64) "JetBrains s.r.o." - "JBR-17.0.9+8-1166.2-nomod 17.0.9" /Users/users/Library/Java/JavaVirtualMachines/jbr-17.0.9/Contents/Home
1.8.401.10 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_401 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
1.8.0_241 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
/Users/guorunze/Library/Java/JavaVirtualMachines/jbr-17.0.11/Contents/Home

这里就可以拿到 Home 的路径

查看环境

jenv versions 查看所有配置的环境

jenv version 查看当前激活的环境

1
2
3
4
$ jenv versions
system
* Java17 (set by /Users/users/.jenv/version)
Java8
1
2
$ jenv version
Java17 (set by /Users/users/.jenv/version)

切换

jenv 提供了三种级别的切换操作,切换后就可以修改当前使用的 Java 环境了

  • global
  • local
  • shell
1
2
3
4
5
$ jenv global alias

$ jenv local alias

$ jenv shell alias

alias 为 add 环境时设置的别名,即在 versions 中展示的 name

1
2
3
4
5
6
7
$ jenv version
Java17 (set by /Users/users/.jenv/version)

$ jenv global Java8

$ jenv version
Java8 (set by /Users/users/.jenv/version)

oh-my-zsh 设置

为了方便使用可以对 .zshrc 文件进行配置,我配置了 function 和 alias

function

1
2
3
4
5
jenv_global_version() {
local jenvName="$1"
jenv global ${jenvName}
echo "\033[32mJava global version 切换\033[0m [\033[36m${jenvName}\033[0m]"
}

alias

1
2
alias j8='jenv_global_version Java8'
alias j17='jenv_global_version Java17'

效果

1
2
$ j17
Java global version 切换 [Java17]

参考

https://github.com/jenv/jenv