Default Java on Mint Linux
or how to configure the default Java on Linux Mint when more than one version is installed. I am fairly certain that this applies to most of the Debian derivatives such as those considered spin-offs of Ubuntu.
Also, below explains how to get rid of ugly IBM Java old crappy version also known as IBM Java Runtime Environment.
Ubuntu / Mint needs some kind of Java for software like LibreOffice to function. In the absence of Oracle or OpenJDK it will, without asking you, install ibm-java80-jre which is compatible with very little today. Get rid of it...
sudo apt remove ibm-java80-jre
The Ubuntu / Mint insists on having either OpenJDK or IBM Java on the system. Even if you install Oracle Java (real Java) you will still have one of the others unless you really go in and start ripping things out manually, which can be a bad thing.
Got lots of Java binaries floating around? Java bin here and there, multiple versions, finding out that OpenJDK version 11 hates Minecraft or other games?
You can have more than one version on the system. You can configure your software to pick a specific version. However, the system references a default Java binary in the absence of a specific path and sometimes dependencies of the Java application will, even when launched specifically from the command line, refer to the default configured system.
/usr/bin/java -jar somesoftware.jar
YOU CAN USE A SYSTEM COMMAND TO SET THE DEFAULT JAVA PREFERENCE
update-alternatives --config java
You will see something like this:
here 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 1111 auto mode * 1 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
The minecraft launcher is not popular with OpenJDK 11 however works well with OpenJDK 8.
Now that we changed our default, lets run the java command without absolute path to the java
# java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
Looks good! It is no longer reporting version 11.
What the update-alternatives script does is maintains symbolic links to various executable binaries in directories like /usr/bin because those are the ones executed by default from the environment path. The command isn't just for picking a Java version.
Contents
Troubleshooting
Error: There is only one alternative in link group java
- Download the version you wish to run, for our example Oracle 8 from the file jre-8u181-linux-x64.tar.gz
- Extract jre-8u181-linux-x64.tar.gz to /usr/local (or what is appropriate for your distribution, see below) - you end up with the java binary in the path: /usr/local/jre1.8.0_181/bin
- Add the java to the update-alternatives link group - sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/jre1.8.0_181/bin/java" 8
- Then run update-alternatives
Linux Mint 19.2 - Extract jre-8u181-linux-x64.tar.gz to /usr/lib/jvm - you end up with the java binary in the path: /usr/lib/jvm/jre1.8.0_181/bin
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.8.0_181/bin/java" 8
You will have to fix file permissions to match the other stuff in that directory. chown root, chgrp root, chmod 755 recursive within the jre1.8.0_181 folder.
To test, remember only one dash - on the version "java -version" command line switch
/usr/lib/jvm/jre1.8.0_181/bin/java -version
Here is the Linux Mint 19.2 Example:
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.8.0_181/bin/java" 8 $ sudo update-alternatives --config java 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 1111 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode 2 /usr/lib/jvm/jre1.8.0_181/bin/java 8 manual mode Press <enter> to keep the current choice[*], or type selection number: 2 update-alternatives: using /usr/lib/jvm/jre1.8.0_181/bin/java to provide /usr/bin/java (java) in manual mode $ java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
For example you right click on a jar file and choose to open with Oracle Java 8 yet it opens in OpenJDK 8.
On versions of Linux Mint / Cinnamon the Java Alternatives version you choose will override what the shell menu displays. The shell does not know what mapping is in the sub system. You can always set a specific path in the shell or just drop to CLI and change the alternative you wish to use for the particular jar file. Hard setting the path in the shell is probably possible too.
Howto Install ...
OpenJDK (example)
install
sudo apt install openjdk-11-jdk
remove
sudo apt remove openjdk-11-jdk
Oracle Java (example)
Crappy IBM Java (example)
install
sudo apt install ibm-java80-jre
remove
sudo apt remove ibm-java80-jre
See: IBM Java Runtime Environment
Some Related Pages
- Oracle Java for Linux
- Default Java on Mint Linux
- IBM Java Runtime Environment
- Java Quick Starter