Introduction
After checking your Java Environment, downloaded and installed either an Oracle JDK or an Open JDK, now it's time to pack everything together.
At this point, you have a JVM installed below your /usr/lib/jvm directory and you've a jinfo file tuned to your needs with a unique priority number.
Install
Now it's time to link /etc/alternatives with our new installed JVM.
Usually one has to install each java commands, tools or libraries one by one with the following interactive command:
user@machine:~$ /usr/lib/jvm$ sudo update-alternatives --config java There are 4 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/java 1073 auto mode 1 /usr/lib/jvm/default-java/jre/bin/java 1073 manual mode 2 /usr/lib/jvm/java-8-openjdk-i386/jre/bin/java 1069 manual mode 3 /usr/lib/jvm/java-8-oracle/jre/bin/java 1070 manual mode * 4 /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/java 1073 manual mode
If your new installed JVM doesn't appear in this list you need to add it manually with:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/default-java/jre/bin/java" 1073;
Check if your added JVM has been processed by running:
user@machine:~$ update-alternatives --list java /usr/lib/jvm/default-java/jre/bin/java /usr/lib/jvm/java-8-openjdk-i386/jre/bin/java /usr/lib/jvm/java-8-oracle/jre/bin/java /usr/lib/jvm/ramdisk-java-8-oracle/jre/bin/java
installDefaultJavaAlternatives.sh
Doing this task one by one is pretty tedious, we provide a shell script ito facilitate the work.
The trick here is to always increment the priority number for a new installed JVM and define a unique alternative name. Here is an excerpt of the man page:
If the alternative name specified exists already in the alternatives system's records, the information supplied will be added as a new set of alternatives for the group. Otherwise, a new group, set to auto‐ matic mode, will be added with this information. If the group is in automatic mode, and the newly added alternatives' priority is higher than any other installed alternatives for this group, the symlinks will be updated to point to the newly added alternatives.
#/usr/lib/jvm/default-java/jre/bin sudo update-alternatives --install /usr/bin/ControlPanel ControlPanel /usr/lib/jvm/default-java/jre/bin/ControlPanel 1073; sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/default-java/jre/bin/java 1073; sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/default-java/jre/bin/javaws 1073; sudo update-alternatives --install /usr/bin/jcontrol jcontrol /usr/lib/jvm/default-java/jre/bin/jcontrol 1073; sudo update-alternatives --install /usr/bin/jjs jjs /usr/lib/jvm/default-java/jre/bin/jjs 1073; sudo update-alternatives --install /usr/bin/keytool keytool /usr/lib/jvm/default-java/jre/bin/keytool 1073; sudo update-alternatives --install /usr/bin/orbd orbd /usr/lib/jvm/default-java/jre/bin/orbd 1073; sudo update-alternatives --install /usr/bin/pack200 pack200 /usr/lib/jvm/default-java/jre/bin/pack200 1073; sudo update-alternatives --install /usr/bin/policytool policytool /usr/lib/jvm/default-java/jre/bin/policytool 1073; sudo update-alternatives --install /usr/bin/rmid rmid /usr/lib/jvm/default-java/jre/bin/rmid 1073; sudo update-alternatives --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/default-java/jre/bin/rmiregistry 1073; sudo update-alternatives --install /usr/bin/servertool servertool /usr/lib/jvm/default-java/jre/bin/servertool 1073; sudo update-alternatives --install /usr/bin/tnameserv tnameserv /usr/lib/jvm/default-java/jre/bin/tnameserv 1073; sudo update-alternatives --install /usr/bin/unpack200 unpack200 /usr/lib/jvm/default-java/jre/bin/unpack200 1073; #/usr/lib/jvm/default-java/jre/lib sudo update-alternatives --install /usr/bin/jexec jexec /usr/lib/jvm/default-java/jre/lib/jexec 1073; #/usr/lib/jvm/default-java/bin sudo update-alternatives --install /usr/bin/appletviewer appletviewer /usr/lib/jvm/default-java/bin/appletviewer 1073; sudo update-alternatives --install /usr/bin/extcheck extcheck /usr/lib/jvm/default-java/bin/extcheck 1073; sudo update-alternatives --install /usr/bin/idlj idlj /usr/lib/jvm/default-java/bin/idlj 1073; sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/default-java/bin/jar 1073; sudo update-alternatives --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/default-java/bin/jarsigner 1073; sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/default-java/bin/javac 1073; sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/default-java/bin/javadoc 1073; sudo update-alternatives --install /usr/bin/javafxpackager javafxpackager /usr/lib/jvm/default-java/bin/javafxpackager 1073; sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/default-java/bin/javah 1073; sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/default-java/bin/javap 1073; sudo update-alternatives --install /usr/bin/javapackager javapackager /usr/lib/jvm/default-java/bin/javapackager 1073; sudo update-alternatives --install /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/default-java/bin/java-rmi.cgi 1073; sudo update-alternatives --install /usr/bin/jcmd jcmd /usr/lib/jvm/default-java/bin/jcmd 1073; sudo update-alternatives --install /usr/bin/jconsole jconsole /usr/lib/jvm/default-java/bin/jconsole 1073; sudo update-alternatives --install /usr/bin/jdb jdb /usr/lib/jvm/default-java/bin/jdb 1073; sudo update-alternatives --install /usr/bin/jdeps jdeps /usr/lib/jvm/default-java/bin/jdeps 1073; sudo update-alternatives --install /usr/bin/jhat jhat /usr/lib/jvm/default-java/bin/jhat 1073; sudo update-alternatives --install /usr/bin/jinfo jinfo /usr/lib/jvm/default-java/bin/jinfo 1073; sudo update-alternatives --install /usr/bin/jmap jmap /usr/lib/jvm/default-java/bin/jmap 1073; sudo update-alternatives --install /usr/bin/jmc jmc /usr/lib/jvm/default-java/bin/jmc 1073; sudo update-alternatives --install /usr/bin/jps jps /usr/lib/jvm/default-java/bin/jps 1073; sudo update-alternatives --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/default-java/bin/jrunscript 1073; sudo update-alternatives --install /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/default-java/bin/jsadebugd 1073; sudo update-alternatives --install /usr/bin/jstack jstack /usr/lib/jvm/default-java/bin/jstack 1073; sudo update-alternatives --install /usr/bin/jstat jstat /usr/lib/jvm/default-java/bin/jstat 1073; sudo update-alternatives --install /usr/bin/jstatd jstatd /usr/lib/jvm/default-java/bin/jstatd 1073; sudo update-alternatives --install /usr/bin/jvisualvm jvisualvm /usr/lib/jvm/default-java/bin/jvisualvm 1073; sudo update-alternatives --install /usr/bin/native2ascii native2ascii /usr/lib/jvm/default-java/bin/native2ascii 1073; sudo update-alternatives --install /usr/bin/rmic rmic /usr/lib/jvm/default-java/bin/rmic 1073; sudo update-alternatives --install /usr/bin/schemagen schemagen /usr/lib/jvm/default-java/bin/schemagen 1073; sudo update-alternatives --install /usr/bin/serialver serialver /usr/lib/jvm/default-java/bin/serialver 1073; sudo update-alternatives --install /usr/bin/wsgen wsgen /usr/lib/jvm/default-java/bin/wsgen 1073; sudo update-alternatives --install /usr/bin/wsimport wsimport /usr/lib/jvm/default-java/bin/wsimport 1073; sudo update-alternatives --install /usr/bin/xjc xjc /usr/lib/jvm/default-java/bin/xjc 1073; #sudo update-alternatives --install /usr/lib/xulrunner-addons/plugins/libjavaplugin.so xulrunner-1.9-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073; sudo update-alternatives --install /usr/lib/firefox-addons/plugins/firefox-javaplugin.so firefox-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073; #sudo update-alternatives --install /usr/lib/iceape/plugins/iceape-javaplugin.so iceape-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073; #sudo update-alternatives --install /usr/lib/iceweasel/plugins/iceweasel-javaplugin.so iceweasel-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073; #sudo update-alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so mozilla-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073; #sudo update-alternatives --install /usr/lib/midbrowser/plugins/midbrowser-javaplugin.so midbrowser-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073; #sudo update-alternatives --install /usr/lib/xulrunner-addons/plugins/libjavaplugin.so xulrunner-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so 1073;
This shell script mirror the content of the jinfo file described in the Java Environment Tutorial.
This shell script file contains various known plugins. However at this time we only describe the Firefox Java plugin support. It is why we suggest the other plugin support as comments.
Usually we store those shell scripts under /usr/lib/jvm/tools. This one is called installDefaultJavaAlternatives.sh.
Don't forget to chmod your shell script.
user@machine:~$cd /usr/lib/jvm/tools user@machine:/usr/lib/jvm/tools$ sudo chmod 744 installDefaultJavaAlternatives.sh user@machine:/usr/lib/jvm/tools$ ls -al installDefaultJavaAlternatives.sh -rwxr--r-- 1 root root 6814 Jul 12 11:53 installDefaultJavaAlternatives.sh
Then run it:
user@machine:/usr/lib/jvm/tools$ sudo ./installDefaultJavaAlternatives.sh
Then run
user@machine:/usr/lib/jvm/tools/sudo update-java-alternatives -s default-java
Sometimes the previous command fails because default-java refers to an existing JVM:
user@machine:/usr/lib/jvm/tools$ sudo update-java-alternatives -s default-java update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/appletviewer for appletviewer not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/extcheck for extcheck not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/idlj for idlj not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jarsigner for jarsigner not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jar for jar not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/javac for javac not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/javadoc for javadoc not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/javafxpackager for javafxpackager not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/javah for javah not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/javapackager for javapackager not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/javap for javap not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jcmd for jcmd not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jconsole for jconsole not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jdb for jdb not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jdeps for jdeps not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jhat for jhat not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jinfo for jinfo not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jmap for jmap not registered; not setting update-alternatives: error: alternative /usr/lib/jvm/ramdisk-java-8-oracle/bin/jmc for jmc not registered; not setting ...
In our configuration .default-java.jinfo refers to .ramdisk-java-8-oracle.jinfo:
user@machine:/usr/lib/jvm$ ls -al .default-java.jinfo lrwxrwxrwx 1 root root 30 Jul 12 14:29 .default-java.jinfo -> ./.ramdisk-java-8-oracle.jinfo
The .default-java.jinfo is linked to .ramdisk-java-8-oracle.jinfo who use ramdisk-java-8-oracle as its name. This the reason why the previous command failed.
name=ramdisk-java-8-oracle priority=1073 section=main
It means that ramdisk-java-8-oracle should be installed through the Update Alternatives mechanism before we can set the alternatives to default-java or you define a jinfo file with a different priority number.
Then check again that everything is correct with your Java Update Alternatives Environment.
Uninstall
Now it's time to unlink /etc/alternatives with the JVM we want to uninstall.
Usually one has to uninstall each java commands, tools or libraries one by one with the following interactive command:
sudo update-alternatives --remove "java" "/usr/lib/jvm/default-java/jre/bin/java";
removeDefaultJavaAlternatives.sh
Doing this task one by one is pretty tedious, we provide a shell script ito facilitate the work.
#/usr/lib/jvm/default-java/jre/bin sudo update-alternatives --remove ControlPanel /usr/lib/jvm/default-java/jre/bin/ControlPanel; sudo update-alternatives --remove java /usr/lib/jvm/default-java/jre/bin/java; sudo update-alternatives --remove javaws /usr/lib/jvm/default-java/jre/bin/javaws; sudo update-alternatives --remove jcontrol /usr/lib/jvm/default-java/jre/bin/jcontrol; sudo update-alternatives --remove jjs /usr/lib/jvm/default-java/jre/bin/jjs; sudo update-alternatives --remove keytool /usr/lib/jvm/default-java/jre/bin/keytool; sudo update-alternatives --remove orbd /usr/lib/jvm/default-java/jre/bin/orbd; sudo update-alternatives --remove pack200 /usr/lib/jvm/default-java/jre/bin/pack200; sudo update-alternatives --remove policytool /usr/lib/jvm/default-java/jre/bin/policytool; sudo update-alternatives --remove rmid /usr/lib/jvm/default-java/jre/bin/rmid; sudo update-alternatives --remove rmiregistry /usr/lib/jvm/default-java/jre/bin/rmiregistry; sudo update-alternatives --remove servertool /usr/lib/jvm/default-java/jre/bin/servertool; sudo update-alternatives --remove tnameserv /usr/lib/jvm/default-java/jre/bin/tnameserv; sudo update-alternatives --remove unpack200 /usr/lib/jvm/default-java/jre/bin/unpack200; #/usr/lib/jvm/default-java/jre/lib sudo update-alternatives --remove jexec /usr/lib/jvm/default-java/jre/lib/jexec; #/usr/lib/jvm/default-java/bin sudo update-alternatives --remove appletviewer /usr/lib/jvm/default-java/bin/appletviewer; sudo update-alternatives --remove extcheck /usr/lib/jvm/default-java/bin/extcheck; sudo update-alternatives --remove idlj /usr/lib/jvm/default-java/bin/idlj; sudo update-alternatives --remove jar /usr/lib/jvm/default-java/bin/jar; sudo update-alternatives --remove jarsigner /usr/lib/jvm/default-java/bin/jarsigner; sudo update-alternatives --remove javac /usr/lib/jvm/default-java/bin/javac; sudo update-alternatives --remove javadoc /usr/lib/jvm/default-java/bin/javadoc; sudo update-alternatives --remove javafxpackager /usr/lib/jvm/default-java/bin/javafxpackager; sudo update-alternatives --remove javah /usr/lib/jvm/default-java/bin/javah; sudo update-alternatives --remove javap /usr/lib/jvm/default-java/bin/javap; sudo update-alternatives --remove javapackager /usr/lib/jvm/default-java/bin/javapackager; sudo update-alternatives --remove java-rmi.cgi /usr/lib/jvm/default-java/bin/java-rmi.cgi; sudo update-alternatives --remove jcmd /usr/lib/jvm/default-java/bin/jcmd; sudo update-alternatives --remove jconsole /usr/lib/jvm/default-java/bin/jconsole; sudo update-alternatives --remove jdb /usr/lib/jvm/default-java/bin/jdb; sudo update-alternatives --remove jdeps /usr/lib/jvm/default-java/bin/jdeps; sudo update-alternatives --remove jhat /usr/lib/jvm/default-java/bin/jhat; sudo update-alternatives --remove jinfo /usr/lib/jvm/default-java/bin/jinfo; sudo update-alternatives --remove jmap /usr/lib/jvm/default-java/bin/jmap; sudo update-alternatives --remove jmc /usr/lib/jvm/default-java/bin/jmc; sudo update-alternatives --remove jps /usr/lib/jvm/default-java/bin/jps; sudo update-alternatives --remove jrunscript /usr/lib/jvm/default-java/bin/jrunscript; sudo update-alternatives --remove jsadebugd /usr/lib/jvm/default-java/bin/jsadebugd; sudo update-alternatives --remove jstack /usr/lib/jvm/default-java/bin/jstack; sudo update-alternatives --remove jstat /usr/lib/jvm/default-java/bin/jstat; sudo update-alternatives --remove jstatd /usr/lib/jvm/default-java/bin/jstatd; sudo update-alternatives --remove jvisualvm /usr/lib/jvm/default-java/bin/jvisualvm; sudo update-alternatives --remove native2ascii /usr/lib/jvm/default-java/bin/native2ascii; sudo update-alternatives --remove rmic /usr/lib/jvm/default-java/bin/rmic; sudo update-alternatives --remove schemagen /usr/lib/jvm/default-java/bin/schemagen; sudo update-alternatives --remove serialver /usr/lib/jvm/default-java/bin/serialver; sudo update-alternatives --remove wsgen /usr/lib/jvm/default-java/bin/wsgen; sudo update-alternatives --remove wsimport /usr/lib/jvm/default-java/bin/wsimport; sudo update-alternatives --remove xjc /usr/lib/jvm/default-java/bin/xjc; #sudo update-alternatives --remove xulrunner-1.9-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so; sudo update-alternatives --remove firefox-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so; #sudo update-alternatives --remove iceape-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so; #sudo update-alternatives --remove iceweasel-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so; #sudo update-alternatives --remove mozilla-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so; #sudo update-alternatives --remove midbrowser-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so; #sudo update-alternatives --remove xulrunner-javaplugin.so /usr/lib/jvm/default-java/jre/lib/i386/libnpjp2.so;
This shell script mirror the content of the jinfo file described in the Java Environment Tutorial.
This shell script file contains various known plugins. However at this time we only describe the Firefox Java plugin support. It is why we suggest the other plugin support as comments.
Usually we store those shell scripts under /usr/lib/jvm/tools. This one is called removeDefaultJavaAlternatives.sh.
Don't forget to chmod your shell script.
user@machine:~$cd /usr/lib/jvm/tools user@machine:/usr/lib/jvm/tools$ sudo chmod 744 removeDefaultJavaAlternatives.sh user@machine:/usr/lib/jvm/tools$ ls -al removeDefaultJavaAlternatives.sh -rwxr--r-- 1 root root 6814 Jul 12 11:53 removeDefaultJavaAlternatives.sh
Then run it:
user@machine:/usr/lib/jvm/tools$ sudo ./removeDefaultJavaAlternatives.sh
As you've uninstalled a JVM, it depends whether or not you have other installed JVMs. In case you have more than one, the update-alternatives will update your configuration with the highest priority JVM.
Then check again that everything is correct with your Java Update Alternatives Environment.