通过Jenv管理多JDK版本的详细介绍

 更新时间:2026年05月25日 10:13:43   作者:@SmartSi  
jenv是一个用于管理 Java 环境的工具,它允许用户在不同的Java版本之间轻松切换,这篇文章主要介绍了通过Jenv管理多JDK版本的详细介绍,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

Jenv 是一个轻量级的 Java 版本管理工具,可以帮助你在 macOS/Linux 上轻松安装、切换和管理多个 JDK 版本。下面详细介绍如何使用 jenv 管理多个 JDK 版本。

1. 安装 jenv

推荐使用 Homebrew 安装 jenv 工具来管理多个 JDK 版本:

brew install jenv

安装完成后,根据 shell 类型(bash/zsh)配置环境变量。在这,在 ~/.bash_profile 文件中添加如下信息:

# JENV
export JENV_HOME=.jenv
export PATH=$JENV_HOME/bin:$PATH
eval "$(jenv init -)"

重新加载配置文件使之生效:

source ~/.bash_profile

验证安装:

smarsi:~ smartsi$ jenv doctor
[OK]	No JAVA_HOME set
[OK]	Java binaries in path are jenv shims
[OK]	Jenv is correctly loaded

如果一切正常,会显示’Jenv is correctly loaded’。

需要注意的是 ~/.bash_profile 环境变量中不要配置 JAVA_HOME,否则会出现如下异常:

smarsi:~ smartsi$ jenv doctor
[ERROR]	JAVA_HOME variable already set, scripts that use it directly could not use java version set by jenv
[ERROR]	Java binary in path is not in the jenv shims.
[ERROR]	Please check your path, or try using /path/to/java/home is not a valid path to java installation.
	PATH : ...
[ERROR]	Jenv is not loaded in your bash
[ERROR]	To fix : 	echo 'eval "$(jenv init -)"' >> /Users/smartsi/.bash_profile

2. 安装多 JDK 版本

jenv 本身不安装 JDK,你需要先通过其他方式安装好 JDK。这里以 Homebrew 安装 OpenJDK 为例。首先使用 brew search openjdk 命令搜索可用的 JDK 版本:

2.1 如何选择 JDK

从上面可以看到有两种 JDK,一种是使用 formula 安装 OpenJDK,另一种是使用 cask 安装 Oracle JDK 或其他供应商的 JDK。区别在于安装方式、位置和管理方式:

特性FormulaeCasks
适用对象命令行工具、库、开发包(如 OpenJDK、Maven、Git)原生 GUI 应用程序(如 IntelliJ IDEA、Oracle JDK 安装包)
安装位置通常链接到 /usr/local(或 /opt/homebrew,Apple Silicon)下的 binlib 等目录安装在 /Applications 或用户指定的 Applications 目录
安装内容下载预编译二进制或源码编译,然后通过符号链接集成到系统环境下载 .app 或安装器,拖拽或运行安装程序
JDK 实例brew install openjdk(安装 OpenJDK 的 Homebrew 移植版)brew install --cask oracle-jdkbrew install --cask adoptopenjdk(安装官方或其他供应商的 JDK 安装包)
环境配置安装后通常会自动处理路径(如将 openjdk 加入 PATH),或需要手动链接安装后需要手动设置 JAVA_HOME 或通过 /usr/libexec/java_home 工具管理

当你需要运行 Java 程序时,是选择 Formulae 还是 Casks?当 纯命令行开发/运行 场景时推荐 Formulae(如 brew install openjdk@17)。推荐原因是:安装快捷,自动加入 PATH,便于终端操作,版本切换灵活(配合 jenv)。

2.2 安装 JDK

在这选择使用 formula 方式安装 OpenJDK,以 openjdk@17 为例:

brew install openjdk@17

注意 Mac apple 芯片安装 openjdk@8 会报错: The x86_64 architecture is required for this software. 因此安装 jdk8 可以直接从 Oracle 官网上下载免费版本进行安装。

Homebrew 会将 JDK 安装在 /usr/local/opt/openjdk@<version>(Intel) 或 /opt/homebrew/opt/openjdk@<version>(Apple Silicon) 下。在这 JDK 安装路径为 /opt/homebrew/opt/openjdk@17

/opt/homebrew 为 homebrew 安装路径。

通过安装包安装的 JDK 安装路径一般为 /Library/Java/JavaVirtualMachines/

2.3 将 JDK 添加到 jenv

可以使用 jenv add 命令将 JDK 的主目录路径添加进去。Homebrew 安装的 OpenJDK 路径通常是 /usr/local/opt/openjdk@<version>/opt/homebrew/opt/openjdk@<version>。我们可以通过以下命令添加 OpenJDK 17OpenJDK 11

# 添加 OpenJDK 17
jenv add /opt/homebrew/opt/openjdk@17

# 添加 OpenJDK 11
jenv add /opt/homebrew/opt/openjdk@11
```bash
也可以将通过安装包安装的所有 JDK(如 Oracle JDK)添加到到 jenv:
```bash
jenv add /Library/Java/JavaVirtualMachines/*/Contents/Home

添加成功后,jenv 会给每个 JDK 分配一个简单的名称(如 11.0、17.0 等),你可以用 jenv versions 查看:

smarsi:JavaVirtualMachines smartsi$ jenv versions
* system (set by /Users/smartsi/.jenv/version)
  1.8
  1.8.0.461
  11
  11.0
  11.0.27
  17
  17.0
  17.0.15
  openjdk64-11.0.27
  openjdk64-17.0.15
  oracle64-1.8.0.461

3. 管理 JDK 版本

3.1 设置全局默认版本

可以通过 jenv global xxx 命令来设置全局默认版本:

smarsi:~ smartsi$ java -version
java version "1.8.0_461"
Java(TM) SE Runtime Environment (build 1.8.0_461-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode)
smarsi:~ smartsi$ jenv global 17.0
smarsi:~ smartsi$ java -version
openjdk version "17.0.15" 2025-04-15
OpenJDK Runtime Environment Homebrew (build 17.0.15+0)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.15+0, mixed mode, sharing)
smarsi:~ smartsi$ jenv global 1.8
smarsi:~ smartsi$ java -version
java version "1.8.0_461"
Java(TM) SE Runtime Environment (build 1.8.0_461-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode)

上述的 jenv global 17.0 命令会将系统默认 Java 版本设置为 17.0,后续所有新打开的终端都会使用此版本。

3.2 为当前目录设置局部版本

可以通过 jenv local xxx 命令为当前目录设置局部版本,进入你的项目目录(例如,/opt/workspace/datavines),运行:

smarsi:~ smartsi$ cd /opt/workspace/datavines
smarsi:datavines smartsi$ jenv local 17.0
smarsi:datavines smartsi$
smarsi:datavines smartsi$ java -version
openjdk version "17.0.15" 2025-04-15
OpenJDK Runtime Environment Homebrew (build 17.0.15+0)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.15+0, mixed mode, sharing)

上述的 jenv local 17.0 命令会将 /opt/workspace/datavines 目录的 Java 版本设置为 17.0。这会在当前目录下生成一个 .java-version 文件,进入该目录时自动切换为 JDK 17,退出目录后恢复为全局版本。

3.3 为当前 shell 会话临时设置版本

该设置只对当前终端窗口有效,关闭后失效:

jenv shell 17.0

4. 卸载 JDK 或从 jenv 中移除

如果要从 jenv 中移除某个 JDK(不卸载 JDK 本身),可以运行 jenv remove xxx 命令:

smarsi:~ smartsi$ jenv remove 11.0
JDK 11.0 removed

如果要彻底卸载 JDK(如通过 Homebrew 安装的),可以运行 brew uninstall xxx 命令:

smarsi:~ smartsi$ brew uninstall openjdk@11
Uninstalling /opt/homebrew/Cellar/openjdk@11/11.0.27... (667 files, 310.4MB)

5. 配置 jenv 插件(推荐)

为了确保 JAVA_HOME 环境变量也能自动切换,建议启用 export 插件:

smarsi:~ smartsi$ jenv enable-plugin export
You may restart your session to activate jenv export plugin
export plugin activated

重启 shell 使配置生效。全局 Java 版本为 1.8,我们单独为 /opt/workspace/datavines 目录设置为 17.0,查看演示效果:

smarsi:~ smartsi$ cd /opt/workspace/
smarsi:workspace smartsi$
smarsi:workspace smartsi$ echo $JAVA_HOME
/Users/smartsi/.jenv/versions/1.8
smarsi:workspace smartsi$
smarsi:workspace smartsi$ cd datavines
smarsi:datavines smartsi$
smarsi:datavines smartsi$ echo $JAVA_HOME
/Users/smartsi/.jenv/versions/17.0

6. 总结

通过 jenv,你可以轻松管理多个 JDK 版本,在不同项目间无缝切换,而无需手动修改环境变量。配合 Homebrew 安装 JDK,整个过程非常流畅。现在你可以愉快地在多个 Java 版本之间切换工作了!

到此这篇关于通过Jenv管理多JDK版本的文章就介绍到这了,更多相关Jenv管理多JDK版本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring基于注解管理bean实现方式讲解

    Spring基于注解管理bean实现方式讲解

    很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean,这就是Bean的加载控制,一般我们可以通过编程式或注解式两种不同的方式来完成Bean的管理
    2023-01-01
  • java多线程编程必备volatile与synchronized深入理解

    java多线程编程必备volatile与synchronized深入理解

    这篇文章主要介绍了java多线程编程必备volatile与synchronized的深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 详细说一说Java序列化的几种方式对比

    详细说一说Java序列化的几种方式对比

    在某种情况下需要考虑一些安全问题和数据对象的使用问题,这时候就可以用序列化的技术来进行数据存储,这篇文章主要介绍了Java序列化几种方式对比的相关资料,需要的朋友可以参考下
    2025-07-07
  • BeanFactory和FactoryBean的区别示例详解

    BeanFactory和FactoryBean的区别示例详解

    这篇文章主要为大家介绍了BeanFactory和FactoryBean的区别示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 在Java编程中使用正则表达式

    在Java编程中使用正则表达式

    这篇文章主要介绍了在Java编程中使用正则表达式,注意使用matches()方法检测一下Java对正则表达式的支持情况,需要的朋友可以参考下
    2015-08-08
  • Java报错sun.misc.Unsafe.park(Native Method)问题

    Java报错sun.misc.Unsafe.park(Native Method)问题

    这篇文章主要介绍了Java报错sun.misc.Unsafe.park(Native Method)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java实现FTP文件的上传和下载功能的实例代码

    Java实现FTP文件的上传和下载功能的实例代码

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。接下来通过本文给大家实例讲解Java实现FTP文件的上传和下载功能,需要的的朋友一起看看吧
    2016-11-11
  • Java如何使用ConfigurationProperties获取yml中的配置

    Java如何使用ConfigurationProperties获取yml中的配置

    这篇文章主要介绍了Java如何使用ConfigurationProperties获取yml中的配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java实现轻松提取word和pdf文档内容

    Java实现轻松提取word和pdf文档内容

    这篇文章主要为大家详细介绍了如何使用Java实现轻松提取word和pdf文档内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-10-10
  • SpringBoot 读取yml文件的多种方式汇总

    SpringBoot 读取yml文件的多种方式汇总

    这篇文章主要介绍了SpringBoot读取yml文件的几种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论