jenv:管理多个 Java 版本的命令行工具

文章目录

  • jenv:管理多个 Java 版本的命令行工具

jenv:管理多个 Java 版本的命令行工具

jenv 是一个 Java 环境管理工具,从 rbenv 演化而来,在 GitHub 上有 6,620 个 Star。

做 Android 开发的人经常会遇到这样的问题:构建工具要求 Java 8,但服务端项目用的是 Java 11 或更高版本。每次切换项目都要手动改 JAVA_HOME,路径写错一个字符就可能编译失败。jenv 就是来解决这个问题的。

jenv 本身不负责安装 Java,它只管版本切换和环境变量配置。你需要先用系统包管理器把 Java 装好,再通过jenv add把路径注册进去。

版本切换的三种模式

jenv 支持三个层级的版本设置:

  • global:全局默认版本,优先级最低
  • local:目录级别,会在当前目录生成.java-version文件,进入该目录自动生效
  • shell:仅在当前终端会话中生效,优先级最高

多个层级同时存在时,高优先级覆盖低优先级。比如 global 设的是 17,shell 设的是 11,最终用的就是 11。

安装和配置

macOS 用户用 Homebrew 装就行:

brew install jenv

Linux 用户也可以从源码安装,克隆仓库到~/.jenv目录即可。

装完后在 shell 配置文件里加一行初始化命令:

# bash echo 'eval "$(jenv init -)"' >> ~/.bash_profile # zsh echo 'eval "$(jenv init -)"' >> ~/.zshrc

重启终端后生效。Fish shell 也有支持,不过官方标注为未充分测试。

接下来把已安装的 Java 注册进去:

jenv add "$(/usr/libexec/java_home)"

jenv versions查看已注册的版本列表。切换版本用jenv globaljenv localjenv shell,加--unset可以取消设置。

安装完成后可以用jenv doctor检查状态,它会告诉你 jenv 是否正确加载、JAVA_HOME 是否设置、Java 二进制是否在 shim 路径中。如果哪里有问题,输出会直接标红提示。

插件系统

要让 jenv 自动设置 JAVA_HOME,需要启用 export 插件:

jenv enable-plugin export

除此之外,jenv 还内置了 gradle、maven、ant、lein、sbt 等插件。启用后,运行对应构建工具时会自动注入 JVM 参数。比如启用 gradle 插件后,GRADLE_OPTS会被自动设置,你不用再手动配置。

典型使用场景

假设你同时维护一个 Android 项目和一个 Spring Boot 服务。Android 项目需要 Java 8,Spring Boot 用 Java 21。你可以在 Android 项目根目录执行jenv local 1.8,在 Spring Boot 项目根目录执行jenv local 21。之后进入各自目录时,jenv 会自动切换版本,JAVA_HOME 也会跟着变。

jenv 适合需要在多个 Java 版本之间频繁切换的开发者。Android 开发是典型场景,构建工具对 Java 版本敏感,经常需要固定到某个特定版本。服务端开发如果同时维护多个项目,每个项目用不同的 JDK,jenv 也能省不少事。

具对 Java 版本敏感,经常需要固定到某个特定版本。服务端开发如果同时维护多个项目,每个项目用不同的 JDK,jenv 也能省不少事。