jvr: 切换 JDK 版本竟如此丝滑!

46 阅读2分钟

jvr: 切换JDK 版本竟如此丝滑

0.引言

各位小伙伴在开发过程中是否遇到过, 不同项目需要切换 JDK 版本号的情况(当然:通过 maven 配置等方式也可以解决)?

今天为大家带来: jvr.

注意: 业界也有比较成熟的解决方案, 比如:

  • sdkman
  • mise
  • ...

1.安装

注意: 需要将任何形式获取的二进制放到系统 $PATH

  • $ cargo install jvr 除外
    • 已自行处理

1.1.Github

直接从 Github 下载预编译好的二进制(根据平台执行选择) 传送门

1.2.crates.io

传送门

$ cargo install jvr

# Or
$ cargo install --git https://github.com/photowey/jvr.git [--branch main]

1.3.源码编译

$ git clone https://github.com/photowey/jvr.git
$ cd jvr
$ cargo build --release

2.介绍

2.1.初始化 JAVA_HOME

1.说明: 当执行 $ jvr init

  • 如果-系统还未创建 JAVA_HOME 环境变量, 则 jvr 会自动创建并加入到系统 $PATH
  • 如果-系统已创建 JAVA_HOME 环境变量, 则 jvr 会尝试替换,必确定是否需要加入到系统 $PATH

2.平台:

  • Windows
    • Windows 平台, jvr 操作的用户级环境变量而非系统级环境变量
  • Unix
    • 如果是类 Unix 平台, jvr 会尝试推断并将变量写入(如果需要)
      • ~/.bashrc - 默认
      • ~/.zshrc
      • ...

3.环境变量管理

  • 建议在使用 jvr 之前, 移除之前的 JAVA_HOME 以及 $PATH,全权交由 jvr 接管
$ jvr init /path/to/your/java_home

2.2.管理 JDK 版本

$ jvr add jdk8 /path/to/your/java_home/jdk8
$ ...
$ $ jvr add jdk25 /path/to/your/java_home/jdk25

2.3.查看 JDK 列表

$ jvr list
# 其中: Current 栏: * 表示当前真在使用的 JDK 版本
jvr list
+---+-------+-------------------------------+---------+
| # | Alias |             Path              | Current |
+---+-------+-------------------------------+---------+
| 1 | jdk8  | /path/to/your/java_home/jdk8  |    -    |
+---+-------+-------------------------------+---------+
| 2 | jdk11 | /path/to/your/java_home/jdk11 |    -    |
+---+-------+-------------------------------+---------+
| 3 | jdk17 | /path/to/your/java_home/jdk17 |    -    |
+---+-------+-------------------------------+---------+
| 4 | jdk21 | /path/to/your/java_home/jdk21 |    -    |
+---+-------+-------------------------------+---------+
| 5 | jdk25 | /path/to/your/java_home/jdk25 |    *    |
+---+-------+-------------------------------+---------+
| 6 | gvm21 | /path/to/your/java_home/gvm21 |    -    |
+---+-------+-------------------------------+---------+

2.4.切换 JDK 版本

  • 无论是在 Windows 还是在其他类 Unix 平台均不需要管理员权限,即可进行切换
    • 您是否还记得 nvm 切换版本的时候需要切换管理员角色
  • 任何平台
    • 却换之后 JDK 立即生效
      • 即便是: 类Unix 平台也不需要再执行 $ source ~/.bashrc 等命令
# 根据别名切换 $ jvr add [alias] $java_home
$ jvr use jdk25
$ jvr list
+---+-------+-------------------------------+---------+
| # | Alias |             Path              | Current |
+---+-------+-------------------------------+---------+
| 1 | jdk8  | /path/to/your/java_home/jdk8  |    -    |
+---+-------+-------------------------------+---------+
| 2 | jdk11 | /path/to/your/java_home/jdk11 |    -    |
+---+-------+-------------------------------+---------+
| 3 | jdk17 | /path/to/your/java_home/jdk17 |    -    |
+---+-------+-------------------------------+---------+
| 4 | jdk21 | /path/to/your/java_home/jdk21 |    -    |
+---+-------+-------------------------------+---------+
| 5 | jdk25 | /path/to/your/java_home/jdk25 |    *    |
+---+-------+-------------------------------+---------+
| 6 | gvm21 | /path/to/your/java_home/gvm21 |    -    |
+---+-------+-------------------------------+---------+

$ jvr use jdk11
$ jvr list
+---+-------+-------------------------------+---------+
| # | Alias |             Path              | Current |
+---+-------+-------------------------------+---------+
| 1 | jdk8  | /path/to/your/java_home/jdk8  |    -    |
+---+-------+-------------------------------+---------+
| 2 | jdk11 | /path/to/your/java_home/jdk11 |    *    |
+---+-------+-------------------------------+---------+
| 3 | jdk17 | /path/to/your/java_home/jdk17 |    -    |
+---+-------+-------------------------------+---------+
| 4 | jdk21 | /path/to/your/java_home/jdk21 |    -    |
+---+-------+-------------------------------+---------+
| 5 | jdk25 | /path/to/your/java_home/jdk25 |    -    |
+---+-------+-------------------------------+---------+
| 6 | gvm21 | /path/to/your/java_home/gvm21 |    -    |
+---+-------+-------------------------------+---------+

# 是否非常丝滑

3.说明

  • jvr 并没有复杂的命令或操作步骤,保持简单
  • jvr 暂时,并不会像 misesdkman 等支持项目级别 JDK
    • 比如: 通过 .jvrrc 实现

4.Q&A

4.1.$ jvr install $version?

为什么没有 $ jvr install $version 这个子命令?

  • 主要是: 部分 JDK 下载 oracle 需要登录
  • IDEA 本身也支持 JDK 下载
  • 如果自行收录不同版本的 JDK, 可能会卷入安全问题的自证漩涡

故: 基于以上问题 jvr 从设计之处就没有考虑支持下载(install) 子命令

保持设计初心: jvr 只做 JDK 版本管理与切换


如果您在使用的过程中遇到任何问题, 请联系我: 传送门 You know me.