如何在 sdkman 中设置自定义 JDK 构建?

How do I set up a custom JDK build in sdkman?

通过从 http://jdk.java.net/loom/ 下载文件,解压它(我有一个名为 jdk-18 的目录),设置 JAVA_HOME env var 到 jdk-18 目录,并将构建的 bin 子目录添加到我的 PATH env var 的开头。我能够使用构建来编译和 运行 使用虚拟线程预览功能的 Java 程序。

但这感觉像是一个非常手动的过程。我喜欢 SDKMAN 在我的系统上管理 JDK 的方式。我如何将这个早期访问构建(或任何其他 JDK 构建)设置为由 SDKMAN 管理的 JDK 列表中的条目,以便我可以更改它,例如, 输入 sdk default java <my-jdk-18-name>?

用于管理多个 JDK 的微调 PATH 变量是多年来唯一直接的做事方式,但是此过程的一般自动化程度正在缓慢提高。

目前我用的是jenv,一般什么POSIX OS都应该支持,我用的是Mac(brew install jenv)。

对我来说它的主要缺点 — 如果您在终端 RC 脚本中包含它的初始化 $(jenv init -),它会延迟终端启动几秒钟。

特定文件夹的切换如下所示: jenv local <my-custom-jdk-name>

SDKMAN 有一个名为“安装本地版本”的功能 (https://sdkman.io/usage#localversion)。

因此,要使用 SDKMAN 设置 JDK 的自定义构建,我可以在任何需要的地方下载并安装 JDK,然后 link 将其安装到 SDKMAN,以便它可以像 SDKMAN 管理的任何其他 JDK 一样使用:

wget https://download.java.net/java/early_access/loom/7/openjdk-18-loom+7-288_linux-x64_bin.tar.gz
tar -xf openjdk-18-loom+7-288_linux-x64_bin.tar.gz
mv jdk-18/ 18-loom
sdk install java 18-loom $(realpath 18-loom/)

安装和 linking 后:

~/javas > sdk default java 18-loom

Default java version set to 18-loom
~/javas > which java
/home/matt/.sdkman/candidates/java/current/bin/java
~/javas > java --version
openjdk 18-loom 2022-03-15
OpenJDK Runtime Environment (build 18-loom+7-288)
OpenJDK 64-Bit Server VM (build 18-loom+7-288, mixed mode, sharing)