web-dev-qa-db-fra.com

Impossible d'installer jdk11 avec update-alternatives --install

pour essayer les nouvelles fonctionnalités de jdk11, je l'ai installé dans/opt/et je veux l'utiliser avec update-alternatives, comme ceci:

Sudo update-alternatives --install /etc/alternatives/Java OpenJDK-11 /opt/jdk-11/bin/Java 1102

qui retourne:

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

Cependant, quand je fais

$ Sudo update-alternatives --config Java

Je ne vois pas le jdk que je viens d'installer. Au lieu de cela, je reçois un avertissement et les choix existants:

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

Que signifie l'avertissement et pourquoi affiche-t-il les entrées en mode automatique et manuel? Et pourquoi mon jdk11 n'est-il pas là?

4
Mr. Wrong

Votre première commande était fausse, je pense; cela aurait dû être:

Sudo update-alternatives /usr/bin/Java java /opt/jdk-11/bin/Java 1102

et la même chose pour tous les autres exécutables du jdk.

comment faire

Installez jdk-11

Installez d’abord jdk-11 dans un répertoire de /usr/lib/jvm. Nous allons utiliser openjdk-11+28-AMD64 ici

Créer un script shell pour mettre automatiquement à jour des alternatives

Je l'appelle 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

Ensuite, créez jdk-11.sh exécutable et lancez

Sudo ./jdk-11.sh -i

ajouter des alternatives pour le nouveau jdk-11

Passer à ce jdk-11

puis passez à cette alternative à l'aide de update-Java-alternatives

Nous avons besoin d'un fichier d'aide appelé .openjdk-11+28.jinfo à l'intérieur de /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

Puis courir

Sudo update-Java-alternatives -s openjdk-11+28-AMD64

Pour revenir au paquet 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
4
solsTiCe