在 Java 开发中,我们经常需要在不同的项目中使用不同版本的 JDK。手动切换 JDK 版本不仅麻烦,还容易出错。为了解决这个问题,我们可以使用 jEnv,一个轻量级的 JDK 版本管理工具。本文将详细介绍 jEnv 的安装、配置和使用方法,帮助你轻松管理多个 JDK 版本。
什么是 jEnv?
jEnv 是一个命令行工具,用于管理多个 JDK 版本。它类似于 nvm(Node Version Manager)或 pyenv(Python Version Manager),但专门为 Java 开发设计。jEnv 的主要功能包括:
- 安装和切换不同版本的 JDK。
- 为特定项目或目录设置本地 JDK 版本。
- 全局设置默认的 JDK 版本。
jEnv 支持 macOS、Linux 和 Windows(通过 WSL),并且与常见的 JDK 发行版(如 Oracle JDK、OpenJDK、AdoptOpenJDK 等)兼容。
安装 jEnv
1. macOS 和 Linux
在 macOS 和 Linux 上,可以通过 Homebrew 或手动安装 jEnv。
使用 Homebrew 安装:
brew install jenv

手动安装:
git clone https://github.com/jenv/jenv.git ~/.jenv
echo 'export PATH="$HOME/.jenv/shims:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
2. Windows
在 Windows 上,可以通过 WSL(Windows Subsystem for Linux)安装 jEnv,方法与 Linux 相同。
配置 jEnv
安装完成后,需要将已安装的 JDK 添加到 jEnv 中。
➜ ~ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >>~/.bash_profile
➜ ~ source ~/.bash_profile
➜ ~ eval "$(jenv init -)"
这个很重要
1. 查看已安装的 JDK
首先,查看系统中已安装的 JDK 路径。可以通过以下命令查找:
/usr/libexec/java_home -V
输出示例:
Matching Java Virtual Machines (12):
23.0.1 (x86_64) "Oracle Corporation" - "Java SE 23.0.1" /Library/Java/JavaVirtualMachines/jdk-23.0.1.jdk/Contents/Home
21.0.6 (x86_64) "Oracle Corporation" - "Java SE 21.0.6" /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
19.0.1 (x86_64) "Oracle Corporation" - "OpenJDK 19.0.1" /Users/jack/Library/Java/JavaVirtualMachines/openjdk-19.0.1/Contents/Home
18.0.2.1 (x86_64) "Oracle Corporation" - "OpenJDK 18.0.2.1" /Users/jack/Library/Java/JavaVirtualMachines/openjdk-18.0.2.1/Contents/Home
17.0.14 (x86_64) "Oracle Corporation" - "Java SE 17.0.14" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
11.0.26 (x86_64) "Oracle Corporation" - "Java SE 11.0.26" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
11.0.25 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/jack/Library/Java/JavaVirtualMachines/corretto-11.0.25/Contents/Home
11.0.24 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/jack/Library/Java/JavaVirtualMachines/corretto-11.0.24/Contents/Home
11.0.19 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/jack/Library/Java/JavaVirtualMachines/corretto-11.0.19/Contents/Home
11.0.17 (x86_64) "Amazon.com Inc." - "Amazon Corretto 11" /Users/jack/Library/Java/JavaVirtualMachines/corretto-11.0.17/Contents/Home
1.8.261.12 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_261 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-23.0.1.jdk/Contents/Home
2. 添加 JDK 到 jEnv
将 JDK 路径添加到 jEnv:
jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home

3. 查看已添加的 JDK
使用以下命令查看 jEnv 中已添加的 JDK:
jenv versions
输出示例:
system
11.0
11.0.13
* 17.0 (set by /Users/username/.jenv/version)
17.0.1
使用 jEnv 管理 JDK 版本
1. 设置全局 JDK 版本
全局 JDK 版本是系统的默认 JDK 版本。可以通过以下命令设置:
jenv global 17.0.1
2. 设置本地 JDK 版本
在特定项目或目录中,可以设置本地 JDK 版本。本地设置会覆盖全局设置:
cd /path/to/your/project
jenv local 11.0.13
这会在项目目录下生成一个 .java-version 文件,记录本地 JDK 版本。
3. 设置 Shell 会话的 JDK 版本
可以为当前 Shell 会话设置临时的 JDK 版本:
jenv shell 11.0.13
4. 查看当前 JDK 版本
使用以下命令查看当前生效的 JDK 版本:
jenv version
jEnv 的插件功能
jEnv 支持插件扩展,可以增强其功能。以下是一些常用的插件:
1. 启用 Maven 插件
jEnv 的 Maven 插件可以确保 Maven 使用正确的 JDK 版本:
jenv enable-plugin maven
2. 启用 Gradle 插件
jEnv 的 Gradle 插件可以确保 Gradle 使用正确的 JDK 版本:
jenv enable-plugin gradle
3. 启用导出插件
导出插件可以将 JDK 路径导出到环境变量:
jenv enable-plugin export
常见问题与解决方案
1. jEnv 无法找到 JDK
确保 JDK 已正确安装,并且路径已添加到 jEnv 中。可以使用以下命令检查:
jenv versions
2. jEnv 切换版本无效
确保已正确设置全局、本地或 Shell 会话的 JDK 版本。可以使用以下命令检查当前版本:
jenv version
3. jEnv 插件未生效
确保插件已正确启用。可以使用以下命令查看已启用的插件:
jenv plugins
jenv 能够切换 JDK 版本的原理主要依赖于 修改环境变量(JAVA_HOME)和 PATH,通过劫持 java、javac 等命令的执行路径,使其指向不同的 JDK 版本。以下是它的核心原理:
** jenv 的核心机制**
jenv 主要通过以下方式来管理和切换 JDK 版本:
-
劫持
JAVA_HOME变量jenv通过jenv shell,jenv local,jenv global等命令修改JAVA_HOME变量,使java相关命令指向指定的 JDK 版本。
-
劫持
java,javac等命令jenv在~/.jenv/shims/目录下创建了一系列可执行文件(shims),这些 shims 代替了系统默认的java、javac、javadoc等命令。- 当你在终端运行
java时,它实际上执行的是~/.jenv/shims/java,然后jenv再根据当前环境(global/local/shell)决定实际执行哪个 JDK 版本。
-
基于
shim机制动态调整 JDK 版本jenv通过jenv rehash来更新shims目录,使得java、javac等命令能正确调用不同 JDK 版本的二进制文件。
总结
jEnv 是一个强大的 JDK 版本管理工具,可以帮助开发者轻松切换和管理多个 JDK 版本。通过 jEnv,我们可以:
- 全局设置默认的 JDK 版本。
- 为特定项目或目录设置本地 JDK 版本。
- 为当前 Shell 会话设置临时的 JDK 版本。
无论是开发多版本 Java 项目,还是在不同项目之间切换,jEnv 都能大大提高开发效率。如果你还没有尝试过 jEnv,赶快安装并体验吧!
参考链接
本文来自博客园,作者:茄子_2008,转载请注明原文链接:https://www.cnblogs.com/xd502djj/p/18763249
浙公网安备 33010602011771号