You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:17:40