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
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;
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
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";
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";
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.