首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用更新选项安装jdk11 --安装

无法使用更新选项安装jdk11 --安装
EN

Ask Ubuntu用户
提问于 2018-09-28 14:11:44
回答 1查看 14.1K关注 0票数 8

为了尝试jdk11的新特性,我将其安装到/opt/中,并希望使用update替代方法使用它,如下所示:

代码语言:javascript
复制
sudo update-alternatives --install /etc/alternatives/java OpenJDK-11 /opt/jdk-11/bin/java 1102

返回:

代码语言:javascript
复制
update-alternatives: using /opt/jdk-11/bin/javac to provide /etc/alternatives/java (OpenJDK-11) in auto mode

但是,当我做了

代码语言:javascript
复制
$ sudo update-alternatives --config java

我没有看到我刚刚安装的jdk。相反,我得到了一个警告和已经存在的选择:

代码语言:javascript
复制
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

警告意味着什么,为什么它实际上同时显示了自动和手动模式条目?为什么我的jdk11不在里面?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2018-09-28 17:14:04

我想你的第一个命令是错的,它应该是:

代码语言:javascript
复制
sudo update-alternatives /usr/bin/java java /opt/jdk-11/bin/java 1102

对于jdk的所有其他可执行文件也是如此。

如何做

安装jdk-11

首先,在/usr/lib/jvm中的一个目录中安装jdk-11。我们将在这里使用openjdk-11+28-amd64

创建一个shell脚本来自动地执行

我叫它jdk-11.sh

代码语言:javascript
复制
#!/bin/bash
if [[ $# -eq 0 ]] ;then
    echo "Usage: jdk-11.sh [-i|-r]"
    echo "  -i install alternatives for jdk-11"
    echo "  -r remove alternatives for jdk-11"
    exit -1
fi

install_dir="openjdk-11+28-amd64"

cmd=(java jexec jjs keytool pack200 rmid rmiregistry unpack200 jaotc jarsigner jar javac javadoc javap jcmd jdb jdeprscan jdeps jhsdb jimage jinfo jlink jmap jmod jps jrunscript jshell jstack jstatd jstat rmic serialver jconsole)

if [[ "$1" == "-i" ]] ;then
    for c in ${cmd[@]}; do
        update-alternatives --install /usr/bin/$c $c /usr/lib/jvm/$install_dir/bin/$c 1102
    done
fi

if [[ "$1" == "-r" ]] ;then
    for c in ${cmd[@]}; do
        update-alternatives --remove $c /usr/lib/jvm/$install_dir/bin/$c
        update-alternatives --auto $c
    done
fi

然后使jdk-11.sh可执行,然后运行

代码语言:javascript
复制
sudo ./jdk-11.sh -i

为新的jdk-11添加替代品

切换到这个jdk-11

然后在update-java-alternatives的帮助下切换到那个替代方案

我们需要一个名为.openjdk-11+28.jinfo We /usr/lib/jvm的助手文件

代码语言:javascript
复制
name=openjdk-11+28-amd64
alias=openjdk-11+28-amd64
priority=1102
section=main

hl rmid /usr/lib/jvm/openjdk-11+28-amd64/bin/rmid
hl java /usr/lib/jvm/openjdk-11+28-amd64/bin/java
hl keytool /usr/lib/jvm/openjdk-11+28-amd64/bin/keytool
hl jjs /usr/lib/jvm/openjdk-11+28-amd64/bin/jjs
hl pack200 /usr/lib/jvm/openjdk-11+28-amd64/bin/pack200
hl rmiregistry /usr/lib/jvm/openjdk-11+28-amd64/bin/rmiregistry
hl unpack200 /usr/lib/jvm/openjdk-11+28-amd64/bin/unpack200
hl jexec /usr/lib/jvm/openjdk-11+28-amd64/lib/jexec
jdkhl jlink /usr/lib/jvm/openjdk-11+28-amd64/bin/jlink
jdkhl jdeps /usr/lib/jvm/openjdk-11+28-amd64/bin/jdeps
jdkhl rmic /usr/lib/jvm/openjdk-11+28-amd64/bin/rmic
jdkhl jinfo /usr/lib/jvm/openjdk-11+28-amd64/bin/jinfo
jdkhl jstat /usr/lib/jvm/openjdk-11+28-amd64/bin/jstat
jdkhl javac /usr/lib/jvm/openjdk-11+28-amd64/bin/javac
jdkhl jhsdb /usr/lib/jvm/openjdk-11+28-amd64/bin/jhsdb
jdkhl jps /usr/lib/jvm/openjdk-11+28-amd64/bin/jps
jdkhl jstack /usr/lib/jvm/openjdk-11+28-amd64/bin/jstack
jdkhl jrunscript /usr/lib/jvm/openjdk-11+28-amd64/bin/jrunscript
jdkhl javadoc /usr/lib/jvm/openjdk-11+28-amd64/bin/javadoc
jdkhl jmod /usr/lib/jvm/openjdk-11+28-amd64/bin/jmod
jdkhl javap /usr/lib/jvm/openjdk-11+28-amd64/bin/javap
jdkhl jar /usr/lib/jvm/openjdk-11+28-amd64/bin/jar
jdkhl jaotc /usr/lib/jvm/openjdk-11+28-amd64/bin/jaotc
jdkhl jshell /usr/lib/jvm/openjdk-11+28-amd64/bin/jshell
jdkhl jmap /usr/lib/jvm/openjdk-11+28-amd64/bin/jmap
jdkhl jdeprscan /usr/lib/jvm/openjdk-11+28-amd64/bin/jdeprscan
jdkhl jimage /usr/lib/jvm/openjdk-11+28-amd64/bin/jimage
jdkhl jstatd /usr/lib/jvm/openjdk-11+28-amd64/bin/jstatd
jdkhl jdb /usr/lib/jvm/openjdk-11+28-amd64/bin/jdb
jdkhl serialver /usr/lib/jvm/openjdk-11+28-amd64/bin/serialver
jdkhl jcmd /usr/lib/jvm/openjdk-11+28-amd64/bin/jcmd
jdkhl jarsigner /usr/lib/jvm/openjdk-11+28-amd64/bin/jarsigner
jdk jconsole /usr/lib/jvm/openjdk-11+28-amd64/bin/jconsole

那就跑

代码语言:javascript
复制
sudo update-java-alternatives -s openjdk-11+28-amd64

回滚到ubuntu包

代码语言:javascript
复制
sudo update-java-alternatives -s java-1.11.0-openjdk-amd64
sudo ./jdk-11.sh -r # optionnal
sudo rm -rf /usr/lib/jvm/openjdk-11+28-amd64 # optionnal
票数 9
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1079239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档