如何用SDKMAN!管理已安装JDK?操作后状态异常求助
问题描述
想要用SDKMAN!同时管理已安装的Java 17和待安装的Java 19,通过sdk install java [自定义名称] [JDK路径]本地链接Java 17后,SDKMAN!提示安装成功,但执行sdk current java始终返回「Not using any version of java」;执行sdk use java [自定义名称]虽提示操作成功,版本状态仍未更新,不过java -version显示的是目标JDK版本。
可能原因及解决方案
1. 确认SDKMAN!初始化脚本已正确加载
SDKMAN!需要在shell启动时加载初始化脚本,才能正常接管环境变量。检查你的shell配置文件(~/.bashrc、~/.zshrc或对应shell的配置文件),确保包含以下内容:
export SDKMAN_DIR="$HOME/.sdkman" [[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"
如果没有,添加后执行source ~/.bashrc(或对应配置文件)重启shell环境。
2. 刷新SDKMAN!缓存
SDKMAN!可能未同步本地安装的版本信息,执行以下命令清空缓存:
sdk flush cache
之后执行sdk list java,应该能看到你本地链接的17.0.4.1-Bell版本。
3. 重新设置默认版本并验证
执行sdk default java 17.0.4.1-Bell将该版本设为全局默认,然后重启shell,再执行以下命令验证:
sdk current java echo $JAVA_HOME
此时JAVA_HOME应指向SDKMAN!的链接路径(如~/.sdkman/candidates/java/17.0.4.1-Bell),sdk current java也会显示当前使用的版本。
4. 调整本地版本命名规范
SDKMAN!对本地安装的版本名称有长度限制(不超过15字符),建议遵循[版本号]-[厂商名]的小写格式,可尝试重新安装:
sdk uninstall java 17.0.4.1-Bell sdk install java 17.0.4.1-bell /usr/lib/jvm/bellsoft-java17-full-amd64
再重复步骤2和3验证状态。
验证示例
完成操作后终端输出应类似:
john@NUC8i3BEH:~$ sdk current java Using java version 17.0.4.1-bell john@NUC8i3BEH:~$ echo $JAVA_HOME /home/john/.sdkman/candidates/java/17.0.4.1-bell john@NUC8i3BEH:~$ java -version openjdk version "17.0.4.1" 2022-08-12 LTS OpenJDK Runtime Environment (build 17.0.4.1+1-LTS) OpenJDK 64-Bit Server VM (build 17.0.4.1+1-LTS, mixed mode, sharing)
内容的提问来源于stack exchange,提问作者John Knight

