安装openjdk-8-jdk后执行update-alternatives提示Java替代项未注册报错
问题根因
脚本存在两处逻辑错误,直接触发该报错:
- 路径匹配规则错误:通过
apt源安装的OpenJDK 8遵循Debian系文件命名规范,默认安装路径为/usr/lib/jvm/java-8-openjdk-<CPU架构>/,amd64架构下完整java可执行文件路径为/usr/lib/jvm/java-8-openjdk-amd64/bin/java。原脚本按照Oracle JDK的路径格式拼接出的/usr/lib/jvm/jdk1.8.0_312/bin/java实际不存在,自然没有被update-alternatives注册。 - 缺少候选项注册步骤:如果系统是首次安装Java,对应可执行文件未提前加入alternatives管理列表时,直接执行
--set参数会因找不到匹配候选项报错。
修复方法
最简方案(推荐)
OpenJDK 8的apt安装包自带alternatives配置逻辑,不需要手动拼接路径,安装完成后直接通过官方命令切换版本即可:
sudo apt-get update sudo apt-get install -y openjdk-8-jdk # 执行后会列出所有已注册的Java版本,输入OpenJDK 8对应的序号回车即可完成切换 sudo update-alternatives --config java # 验证版本是否正确 java -version
如果需要非交互式自动设置默认版本为OpenJDK 8,直接执行以下命令即可,自动适配所有CPU架构:
# 将OpenJDK 8的java可执行文件注册到alternatives列表,设置优先级为1081(高于Ubuntu源中其他高版本OpenJDK的默认优先级) sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-*/bin/java 1081 # 直接设置为全局默认 sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-*/bin/java # 验证配置结果 java -version
原脚本修正方案
如果需要保留原有脚本的执行流程,只需要修正路径获取逻辑即可,删除错误的版本号拼接规则,替换为实际的OpenJDK路径查找逻辑:
sudo apt-get update sudo apt-get install -y openjdk-8-jdk echo 'Updating eventually the correct version of Java...' # 自动查找系统中已安装的OpenJDK 8可执行文件路径 JAVA_BIN=$(find /usr/lib/jvm -name "java" -path "*java-8-openjdk*" | head -n 1) # 注册候选项 sudo update-alternatives --install /usr/bin/java java "$JAVA_BIN" 1081 # 设置为默认版本 sudo update-alternatives --set java "$JAVA_BIN"
预期结果
配置完成后执行java -version,会输出类似如下的OpenJDK 8版本信息,无alternatives相关报错:
openjdk version "1.8.0_312" OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07) OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
内容的提问来源于stack exchange,提问作者Hani Gotc Reinstate Monica
相关产品推荐
相关产品推荐

