如何在SDKMAN!脚本中切换至本地Oracle JDK 8u261
解决SDKMAN!脚本切换至本地Oracle JDK 8u261的问题
咱们先拆解下你遇到的问题:SDKMAN!提示java 8_261-oracle, is not installed,是因为虽然sdk ls java里显示它是local only,但实际上它还没被SDKMAN!纳入管理范畴——local only只是SDKMAN!检测到了这个JDK的存在,但还没完成“注册”,所以use命令没法直接调用它。
下面是具体的解决步骤:
1. 确认本地Oracle JDK 8u261的安装路径
先找到你本地JDK 8u261的实际安装目录,常见路径比如:
/opt/jdk1.8.0_261~/jdk1.8.0_261/usr/lib/jvm/jdk1.8.0_261
你可以通过echo $JAVA_HOME(如果之前配置过)或者文件查找命令确认准确路径。
2. 把本地JDK注册到SDKMAN!管理中
使用SDKMAN!的install命令,指定对应标识符和本地路径,完成注册:
sdk install java 8_261-oracle /path/to/your/jdk1.8.0_261
这里的8_261-oracle必须和sdk ls java里显示的标识符完全一致,路径替换成你实际的JDK目录。
执行完这个命令后,再运行sdk ls java,你会看到这个JDK的状态从local only变成installed,这样就能用use命令正常切换了。
3. 修改你的脚本
更新后的脚本需要先确保本地JDK已经注册(首次运行后可以注释掉注册命令,保留也不会重复安装),再执行切换操作:
#!/bin/bash . /usr/local/sdkman/bin/sdkman-init.sh # 先注册本地JDK(首次运行成功后可注释,避免重复执行) sdk install java 8_261-oracle /path/to/your/jdk1.8.0_261 || true sdk ls java for i in {"8_261-oracle", "9.0.4-open"} do sdk u java $i # 可选:验证切换是否成功 echo "当前使用的JDK版本:" java -version done
加|| true是为了防止如果已经注册过,命令返回非0值导致脚本中断。
4. 验证脚本效果
运行修改后的脚本,你会看到切换到8_261-oracle时不再报错,并且java -version会显示Oracle JDK 8u261的版本信息。
额外提示
- 标识符必须严格对应
sdk ls java里的字符串,比如不能写成8.0.261-oracle,必须是8_261-oracle - SDKMAN!的
local命令可以临时关联本地JDK,但install是永久注册,更适合脚本自动化场景
内容的提问来源于stack exchange,提问作者Stefan Bollmann
相关产品推荐
相关产品推荐

