I've checked the content of /usr/sbin/update-java-alternatives
and it's just a script that calls update-alternatives
for every entry in the file /usr/lib/jvm/.<jname>.jinfo
.
If you have no such file for your new JDK installation, you can create your own installation script as follows.
Let's suppose you've just installed JDK 17 on Ubuntu via a Debian package and you have this existing situation:
$ update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
* 2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
3 /usr/lib/jvm/jdk-13.0.2/bin/java 1081 manual mode
^CTRL-C
Create the following script:
$ sudo nano jdk-17.0.6.install-alternatives.sh
with the following content, making sure you substitute the right values for the JAVADIR
, PRIORITY
and BINDIR
variables according to your system's configuration:
#!/bin/bash
JAVADIR=/usr/lib/jvm/jdk-17
PRIORITY=1081
BINDIR=/usr/bin
find "$JAVADIR" -perm 755 -type f | while read FP
do
FN=$(basename $FP)
echo "update-alternatives --install /usr/bin/$FN $FN $FP $PRIORITY"
update-alternatives --install /usr/bin/$FN $FN $FP $PRIORITY
done
This will pick all the executable files in your new Java package, even those under directories different from bin/
(i.e. lib/
).
Make the script executable:
$ chmod 755 jdk-17.0.6.install-alternatives.sh
then run it as root:
$ sudo ./jdk-17.0.6.install-alternatives.sh
update-alternatives --install /usr/bin/jspawnhelper jspawnhelper /usr/lib/jvm/jdk-17/lib/jspawnhelper 1081
update-alternatives --install /usr/bin/jexec jexec /usr/lib/jvm/jdk-17/lib/jexec 1081
update-alternatives --install /usr/bin/keytool keytool /usr/lib/jvm/jdk-17/bin/keytool 1081
update-alternatives --install /usr/bin/jmod jmod /usr/lib/jvm/jdk-17/bin/jmod 1081
update-alternatives --install /usr/bin/jimage jimage /usr/lib/jvm/jdk-17/bin/jimage 1081
update-alternatives --install /usr/bin/jstat jstat /usr/lib/jvm/jdk-17/bin/jstat 1081
update-alternatives --install /usr/bin/jdb jdb /usr/lib/jvm/jdk-17/bin/jdb 1081
update-alternatives --install /usr/bin/jstack jstack /usr/lib/jvm/jdk-17/bin/jstack 1081
update-alternatives --install /usr/bin/jcmd jcmd /usr/lib/jvm/jdk-17/bin/jcmd 1081
update-alternatives --install /usr/bin/serialver serialver /usr/lib/jvm/jdk-17/bin/serialver 1081
update-alternatives --install /usr/bin/jinfo jinfo /usr/lib/jvm/jdk-17/bin/jinfo 1081
update-alternatives --install /usr/bin/jps jps /usr/lib/jvm/jdk-17/bin/jps 1081
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1081
update-alternatives --install /usr/bin/jhsdb jhsdb /usr/lib/jvm/jdk-17/bin/jhsdb 1081
update-alternatives --install /usr/bin/jlink jlink /usr/lib/jvm/jdk-17/bin/jlink 1081
update-alternatives --install /usr/bin/jstatd jstatd /usr/lib/jvm/jdk-17/bin/jstatd 1081
update-alternatives --install /usr/bin/jdeprscan jdeprscan /usr/lib/jvm/jdk-17/bin/jdeprscan 1081
update-alternatives --install /usr/bin/jshell jshell /usr/lib/jvm/jdk-17/bin/jshell 1081
update-alternatives --install /usr/bin/jdeps jdeps /usr/lib/jvm/jdk-17/bin/jdeps 1081
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk-17/bin/jar 1081
update-alternatives --install /usr/bin/jfr jfr /usr/lib/jvm/jdk-17/bin/jfr 1081
update-alternatives --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/jdk-17/bin/jarsigner 1081
update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk-17/bin/javadoc 1081
update-alternatives --install /usr/bin/jpackage jpackage /usr/lib/jvm/jdk-17/bin/jpackage 1081
update-alternatives: using /usr/lib/jvm/jdk-17/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode
update-alternatives --install /usr/bin/jmap jmap /usr/lib/jvm/jdk-17/bin/jmap 1081
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 1081
update-alternatives --install /usr/bin/jconsole jconsole /usr/lib/jvm/jdk-17/bin/jconsole 1081
update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk-17/bin/javap 1081
update-alternatives --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/jdk-17/bin/rmiregistry 1081
update-alternatives --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/jdk-17/bin/jrunscript 1081
Now you have the following updated situation for all the executables listed above:
$ update-alternatives --config java
There are 4 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode
1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
* 2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
3 /usr/lib/jvm/jdk-13.0.2/bin/java 1081 manual mode
4 /usr/lib/jvm/jdk-17/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number:
^CTRL-C
$ update-alternatives --config jshell
There are 2 choices for the alternative jshell (providing /usr/bin/jshell).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/jdk-13.0.2/bin/jshell 1081 auto mode
1 /usr/lib/jvm/jdk-13.0.2/bin/jshell 1081 manual mode
2 /usr/lib/jvm/jdk-17/bin/jshell 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number: ^C
$ update-alternatives --config jpackage
There is only one alternative in link group jpackage (providing /usr/bin/jpackage): /usr/lib/jvm/jdk-17/bin/jpackage
Nothing to configure.
^CTRL-C
And so on.