AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1079239
Accepted
Mr. Wrong
Mr. Wrong
Asked: 2018-09-29 06:11:44 +0800 CST2018-09-29 06:11:44 +0800 CST 2018-09-29 06:11:44 +0800 CST

无法使用 update-alternatives --install 安装 jdk11

  • 772

为了试用 jdk11 的新功能,我将它安装到 /opt/ 并希望使用 update-alternatives 来使用它,如下所示:

sudo update-alternatives --install /etc/alternatives/java OpenJDK-11 /opt/jdk-11/bin/java 1102

返回:

update-alternatives: using /opt/jdk-11/bin/javac to provide /etc/alternatives/java (OpenJDK-11) in auto mode

但是,当我这样做时

$ sudo update-alternatives --config java

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

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不在里面?

openjdk update-alternatives
  • 1 1 个回答
  • 12574 Views

1 个回答

  • Voted
  1. Best Answer
    solsTiCe
    2018-09-29T09:14:04+08:002018-09-29T09:14:04+08:00

    我认为您的第一个命令是错误的;它应该是:

    sudo update-alternatives /usr/bin/java java /opt/jdk-11/bin/java 1102
    

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

    怎么做

    安装 jdk-11

    首先将 jdk-11 安装在/usr/lib/jvm. 我们将openjdk-11+28-amd64在这里使用

    创建一个 shell 脚本来自动更新替代方案

    我称之为jdk-11.sh

    #!/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可执行文件,并运行

    sudo ./jdk-11.sh -i
    

    为新的 jdk-11 添加替代品

    切换到这个 jdk-11

    然后在update-java-alternatives

    我们需要一个.openjdk-11+28.jinfo在里面调用的帮助文件/usr/lib/jvm

    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
    

    然后运行

    sudo update-java-alternatives -s openjdk-11+28-amd64
    

    回滚到 ubuntu 包

    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

相关问题

  • 加载 java 小程序时 Firefox 在 ubuntu 上挂起

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve