sudo update-alternatives --config java

Configures the default for the program "java". That's the Java VM.

sudo update-alternatives --config javac

Configures the default Java compiler.

You can also see that, because the first command lists a lot of "JRE" (Java Runtime Environment) folders and the Program is just called "java".

If I check which version is being used by issuing the command java -version or javac -version, I can see, that each command changes the program being used.

However, using update-java-alternatives with a JDK Version changes both programs for me. Using the first commands, you can use a Java VM and Java Compiler from different JDKs.

update-java-alternatives requires presence of a file with extension .jinfo in directory /usr/lib/jvm. The openjdk package is shipped with a .jinfo file, the jdk of Oracle (formerly Sun) is not. As alternative, you configure alternatives without update-java-alternatives:

For example, to add java from jvm-directory /usr/lib/jvm/jdk-12.0.1 (default directory of Debian package of Oracle) with priority 2082, use the following command:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-12.0.1/bin/java 2082

As for switching for different development environments:

Are you talking about starting the IDE itself with different Java versions or using different versions in the IDE for compilation and running your app?

  • For 1.: You can specify which JVM to use in the eclipse.ini, as described here. I don't know how to do that for the Arduino IDE.

  • For 2.: In Eclipse you can select the JRE/JDK to be used in Window -> Preferences -> Java -> Installed JREs. And under Java -> Compiler you could choose an older Java compliance if you wish.

EDIT: This DigitalOcean page also has a very nice explanation of everything related to Java on Ubuntu.

Answer from Benjamin Maurer on askubuntu.com
🌐
DEV Community
dev.to › thegroo › install-and-manage-multiple-java-versions-on-linux-using-alternatives-5e93
Install and manage multiple Java versions on Linux using alternatives - DEV Community
February 10, 2022 - sudo tar -xzf ./zulu17.32.13-ca-jdk17.0.2-linux_x64.tar.gz -C /usr/lib/jvm/azul-open-jdk-17 --strip-components=1 ... You will see a list of configured java in alternatives, the new one is not there so we need to register it like we did in the beginning of this article, let's do it for java and javac, make sure to check the Selection number and add the new one to the next available, hit enter to continue with the current version before progressing, let's now register the new one we downloaded.
Top answer
1 of 4
213
sudo update-alternatives --config java

Configures the default for the program "java". That's the Java VM.

sudo update-alternatives --config javac

Configures the default Java compiler.

You can also see that, because the first command lists a lot of "JRE" (Java Runtime Environment) folders and the Program is just called "java".

If I check which version is being used by issuing the command java -version or javac -version, I can see, that each command changes the program being used.

However, using update-java-alternatives with a JDK Version changes both programs for me. Using the first commands, you can use a Java VM and Java Compiler from different JDKs.

update-java-alternatives requires presence of a file with extension .jinfo in directory /usr/lib/jvm. The openjdk package is shipped with a .jinfo file, the jdk of Oracle (formerly Sun) is not. As alternative, you configure alternatives without update-java-alternatives:

For example, to add java from jvm-directory /usr/lib/jvm/jdk-12.0.1 (default directory of Debian package of Oracle) with priority 2082, use the following command:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-12.0.1/bin/java 2082

As for switching for different development environments:

Are you talking about starting the IDE itself with different Java versions or using different versions in the IDE for compilation and running your app?

  • For 1.: You can specify which JVM to use in the eclipse.ini, as described here. I don't know how to do that for the Arduino IDE.

  • For 2.: In Eclipse you can select the JRE/JDK to be used in Window -> Preferences -> Java -> Installed JREs. And under Java -> Compiler you could choose an older Java compliance if you wish.

EDIT: This DigitalOcean page also has a very nice explanation of everything related to Java on Ubuntu.

2 of 4
36

update-java-alternatives is a program to update alternatives for jre/jdk installations.

update-alternatives is a symbolic link management system for linux (I'm sure there is little news here).

You can, and really should, use both update-java-alternatives and update-alternatives together.

Firstly, be sure to have the all the alternatives configured correctly. java and javac are but a few. There is javadoc, rmic, serialver and others, substituting the above variables for: native2ascii and /opt/jdk1.8.0_40/bin/native2ascii should report if the alternative is installed and/or selected.

When all the alternatives are configured you can then create links in /usr/lib/jvm to your manual instalation.

In order to configure update-java-alternatives you must use a hidden file with the same name as your directory but prefixed by a . (dot).

Hope this helps.

Bibliography

man -S 8 update-java-alternatives

http://tech.lanesnotes.com/2008/03/using-alternatives-in-linux-to-use.html

https://stackoverflow.com/questions/6477415/how-to-set-oracles-java-as-the-default-java-in-ubuntu

Discussions

debian - How to use the command update-alternatives --config java - Stack Overflow
I am installing Apache Solr on Linux Debian (Squeeze). I have been instructed to install sun-java jdk 1st. Then am told that I should use the command sudo update-alternatives --config java to make ... More on stackoverflow.com
🌐 stackoverflow.com
Configure alternatives for java 11
I want to be able to ‘script’ the setting of java 11 as the system java, but have not been able to do so reliably, across multiple hosts. Issuing the command “alternatives --config java” displays java-11 and java-1.8.0, not always in the same order, so I cannot reliably set java-11 ... More on forums.rockylinux.org
🌐 forums.rockylinux.org
3
0
May 28, 2025
linux - Can I use alternatives to manage multiple installs of Java on Ubuntu 20.04? - Unix & Linux Stack Exchange
TLDR On some Linux systems (RedHat/CentOS based), I have found the UNIX alternatives program being used to manage different versions of java. One of my systems is Ubuntu 20.04, and the alternatives More on unix.stackexchange.com
🌐 unix.stackexchange.com
April 5, 2021
alternatives java -OpenJDK RHEL - Unix & Linux Stack Exchange
However: On RHEL, Java installations ... with the java program. In fact, there are between 20 and 50 --slave options that the install scripts for the packages set up. Witness the likes of this post-install script template for OpenJDK from AdoptOpenJDK (which isn't even setting up a JRE alternative, notice) for ... More on unix.stackexchange.com
🌐 unix.stackexchange.com
July 13, 2020
🌐
Medium
medium.com › @adilmustafa006_32164 › install-and-manage-multiple-java-versions-on-linux-using-alternatives-585ac71c23d7
Install and manage multiple Java versions on Linux using alternatives | by Adil Mustafa | Medium
May 1, 2024 - sudo tar -xzf ./zulu17.32.13-ca-jdk17.0.2-linux_x64.tar.gz -C /usr/lib/jvm/azul-open-jdk-17 --strip-components=1 ... You will see a list of configured java in alternatives, the new one is not there so we need to register it like we did in the beginning of this article, let’s do it for java and javac, make sure to check the Selection number and add the new one to the next available, hit enter to continue with the current version before progressing, let’s now register the new one we downloaded.
🌐
Igalia
blogs.igalia.com › dpino › 2011 › 10 › 13 › configuring-different-jdks-with-alternatives
Configuring different JDKs with alternatives - Unweaving the Web
$ alternatives --config java + 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java * 2 /etc/alternatives/java_sdk/bin/java 3 /usr/lib/jvm/jre-1.5.0-gcj/bin/java 4 /usr/java/latest/bin/java 5 /usr/java/jdk1.7.0/bin/java · It seems I got several If you just installed Fedora and run the command above, probably you’ll see nothing, as you haven’t added an alternative yet.
Top answer
1 of 12
84

Assuming one has installed a JDK in /opt/java/jdk1.8.0_144 then:

  1. Install the alternative for javac

    $ sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_144/bin/javac 1
    
  2. Check / update the alternatives config:

    $ sudo update-alternatives --config javac
    

If there is only a single alternative for javac you will get a message saying so, otherwise select the option for the new JDK.

To check everything is setup correctly then:

$ which javac
/usr/bin/javac

$ ls -l /usr/bin/javac
lrwxrwxrwx 1 root root 23 Sep  4 17:10 /usr/bin/javac -> /etc/alternatives/javac

$ ls -l /etc/alternatives/javac
lrwxrwxrwx 1 root root 32 Sep  4 17:10 /etc/alternatives/javac -> /opt/java/jdk1.8.0_144/bin/javac

And finally

$ javac -version
javac 1.8.0_144

Repeat for java, keytool, jar, etc as needed.

2 of 12
76

You will notice a big change when selecting options if you type in "java -version" after doing so. So if you run update-alternatives --config java and select option 3, you will be using the Sun implementation.
Also, with regards to auto vs manual mode, making a selection should take it out of auto mode per this page stating:

When using the --config option, alternatives will list all of the choices for the link group of which given name is the master link. You will then be prompted for which of the choices to use for the link group. Once you make a change, the link group will no longer be in auto mode. You will need to use the --auto option in order to return to the automatic state.

And I believe auto mode is set when you install the first/only JRE/JDK.

🌐
Ubuntu
manpages.ubuntu.com › trusty › man(8)
Ubuntu Manpage: update-java-alternatives - update alternatives for jre/sdk installations
A package does provide these information of it's alternatives in /usr/lib/jvm/.<jname>.jinfo. ... List all installed packages (or just <jname>) providing information to set a bunch of java alternatives.
🌐
Robert Munn
robertmunn.com › blog › install-manage-jdks-linux
Robert Munn | Installing and Managing Multiple Java JDKs on Linux
May 10, 2021 - $ 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/java-11-openjdk-amd6...
Find elsewhere
🌐
Rocky Linux Forum
forums.rockylinux.org › rocky linux help & support
Configure alternatives for java 11 - Rocky Linux Help & Support - Rocky Linux Forum
May 28, 2025 - I want to be able to ‘script’ the setting of java 11 as the system java, but have not been able to do so reliably, across multiple hosts. Issuing the command “alternatives --config java” displays java-11 and java-1.8.0,…
🌐
Red Hat
access.redhat.com › solutions › 6232511
How to set default Java version with alternatives tool in RHEL on a per user basis - Red Hat Customer Portal
2 weeks ago - When different Java versions are installed on a RHEL system, using the alternatives tool as a regular user fails to set the default version. # alternatives --config java There is 2 program that provides 'java'. Selection Command ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el8_4.x86_64/jre/bin/java) 2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-2.el8_4.x86_64/bin/java) Enter to keep the current selection[+], or type selection number: 2 failed to create /var/lib/alternatives/java.new: Permission denied Using the alternatives tool allows you to set the system default version as root but does not currently provide options to set different defaults for individual users.
🌐
Medium
medium.com › @ayeshajayasankha › how-to-install-and-switch-between-alternative-java-versions-66b3671fc382
How To Install And Switch Between Alternative Java Versions | by Ayesha Jayasankha | Medium
July 3, 2019 - export JAVA_HOME=<Directory where JAVA has been extracted>/jdk1.8.0export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin ... sudo update-alternatives — install “/usr/bin/java” “java” “<Directory where JAVA has been extracted>/bin/java” 1sudo ...
🌐
OneUptime
oneuptime.com › home › blog › how to install and switch java versions on ubuntu
How to Install and Switch Java Versions on Ubuntu
March 2, 2026 - # ~/.bashrc # Set JAVA_HOME to the current default Java export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") export PATH=$JAVA_HOME/bin:$PATH · This dynamic approach picks up update-alternatives changes when you open a new shell or source the file again. ... # Install direnv sudo apt install direnv # Add hook to .bashrc echo 'eval "$(direnv hook bash)"' >> ~/.bashrc source ~/.bashrc
🌐
Baeldung
baeldung.com › home › installation › removing old versions of java and installing new versions on linux
Removing Old Versions of Java and Installing New Versions on Linux | Baeldung on Linux
January 14, 2025 - $ tar -xvf jdk-21_linux-x64_bin.tar.gz $ sudo mv jdk-21* /opt/ Next, let’s configure the system to recognize this new Java installation: $ sudo update-alternatives --install /usr/bin/java java /opt/jdk-21*/bin/java 1 $ sudo update-alternatives ...
🌐
Debian
debian.org › doc › manuals › debian-java-faq › ch13.html
Debian GNU/Linux Java FAQ. - Other Java alternatives for Debian
update-alternatives --install /usr/bin/javac javac /usr/local/sun/jdk1.X/bin/javac 120 update-alternatives --install /usr/bin/java Java /usr/local/sun/jdk1.X/bin/java 120 ... You should have now a fully working jdk 1.X environment, virtual machine and compiler included.
🌐
Baeldung
baeldung.com › home › installation › switch between multiple java versions
Switch Between Multiple Java Versions | Baeldung on Linux
March 18, 2024 - $ 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-21-openjdk-amd64/bin/java ...
🌐
Red Hat
access.redhat.com › solutions › 1161843
How to manually install a new java path to the alternatives java group? - Red Hat Customer Portal
How to add Oracle's Java to the alternatives utility? Red Hat Enterprise Linux 6 · Red Hat Enterprise Linux 7 · Red Hat Enterprise Linux 8 · OpenJDK Java · Oracle Java · IBM Java · A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.
🌐
CommandLinux
commandlinux.com › home › man page › update-java-alternatives
UPDATE-JAVA-ALTERNATIVES
April 14, 2026 - A package does provide these information of it’s alternatives in /usr/lib/jvm/.<jname>.jinfo. ... List all installed packages (or just <jname>) providing information to set a bunch of java alternatives.
Top answer
1 of 14
62

You can do this with sudo update-alternatives :

# Adding a new alternative for "java".
sudo update-alternatives --install /usr/bin/java java /media/mydisk/jdk/bin/java 1

# Setting the new alternative as default for "java".
sudo update-alternatives --config java

You have to do this for other jdk components too. These components are appletviewer, extcheck, idlj, jar, jarsigner, java, javac, javadoc, javah, javap, javaws, jconsole, jdb, jexec, jhat, jinfo, jmap, jps, jrunscript, jsadebugd, jstack, jstat, jstatd, keytool, mozilla-javaplugin.so, native2ascii, orbd, pack200, policytool, rmic, rmid, rmiregistry, schemagen, serialver, servertool, tnameserv, unpack200, wsgen, wsimport, xjc.

For further information, you can see the man pages for update-alternatives : man update-alternatives.

The command update-java-alternatives sets alternatives for java components and it seems to use update-alternatives for this.

EDIT: The answer above targets Java 6.

  • For Java 7, you have to add jcmd to the Java 6 list.
  • For Java 8, you have to add jcmd, jjs and jdeps to the Java 6 list.
  • For Java 9, you have to add jcmd, jjs, jdeps and jshell to the Java 6 list.
2 of 14
39

Note: update-java-alternatives won't work with manual installations. In any case, it doesn't look like it has any special abilities which update-alternatives doesn't have, except convenience.

As a graphical alternative to @AnwarShah's command-line method, consider using Gnome Alternatives (sudo apt-get install galternatives):

  • Start GAlternatives, select each java option, change it to manual, and Add your alternative (the example here is the IBM JRE installed in my home directory):

Top answer
1 of 6
7

When you install JDK on Linux, what gets installed depends on the type of package, version and distribution. You can refer to the following links for information about the installation location on linux:

JDK Installation for Linux Platforms - Version 8

JDK Installation for Linux Platforms - Version 7

Once you install JDK, the bin folder containing tools might not get added to the environment variable PATH. Commands typed on the terminal needs to be from the locations specified in the PATH variable. In cases when JDK\bin does not get added, the user would need to configure it manually as mentioned in Installing the JDK Software

alternatives command is being used to create a symbolic link. Here, it is being directed to use the command to add the tools like javac, javaw to /usr/bin which exists in the PATH variable by default.

If( you could execute java -version outside of JDK/bin && not by specifying the complete path && if the version and bundle prints to be as that of package you installed ){ you need not run the alternatives command.}

2 of 6
4

java, javaws, javac, and jar are all different executables used by the JDK. When you run alternatives --config java you are only configuring which version of the java executable you wish to run. However, the JDK includes, for example, the javac compiler. You need to configure which version of the compiler you wish to use as well.

The alternatives command is, in a nutshell, used to maintain a lookup for symbolic (or sym) links. Before you can choose which version of java you want to run with the --configure option, you must first register the actual path to the executable with the --install option. alternatives --install is not installing any software. It is merely registering some paths and aliases with the alternatives framework. (Note: alternatives is not using the alias command. I mean "aliases" in the traditional, literal sense.)

You should also understand what the rpm command does. Really, it is only dropping down a set of binaries into a particular directory. This directory may be long and tedious to explicitly specify: /some/path/to/lib/jvm/java-1.x.x-etc-etc-x86/jre/bin/java. You don't want to specify this every time you want to run java. Instead, we set up some sym links.

You might also want to read up on how the PATH works in linux.

It may become clearer if you try tracing through the setup for your machine. Here is what I ran:

> which java
/usr/bin/java
> ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Aug 14  2014 /usr/bin/java -> /etc/alternatives/java
> ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Aug 14  2014 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.1.2.fc19.x86_64/jre/bin/java