Installing Oracle's JDK on Debian/Ubuntu

Due to licensing issues, Linux distributions don't ship Oracle Java packages anymore. In many cases, that doesn't matter since you can just use OpenJDK. But if you do need Oracle's JDK, Debian packages are a bit more convenient than handling tarballs because they integrate nicely with the rest of the system. Fortunately, there's a simple way of creating a Debian package from the official JDK using the java-package tool.

In Ubuntu, java-package is available from the multiverse repository. On desktop systems, the repository is usually enabled, while on some server systems you may have to enable it yourself. Here's how I did that on an Ubuntu 14.04 LTS machine:

$ cat /etc/apt/sources.list.d/ubuntu-multiverse.list
deb http://de.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://de.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb http://de.archive.ubuntu.com/ubuntu/ trusty-backports multiverse
deb http://security.ubuntu.com/ubuntu trusty-security multiverse
$

After you've created the file, you can install the package we need:

$ sudo apt-get update
$ sudo apt-get install java-package

Now download the official .tar.gz distribution from Oracle's Java portal. For most people, it's the 64-bit version, ie. jdk-8u25-linux-x64.tar.gz.

Run the make-jpkg tool to create the .deb file. There are a few command line switches for setting package metadata (see the man page for more information), but they are optional:

$ make-jpkg jdk-8u25-linux-x64.tar.gz

An interactive wizard will ask you to confirm the licensing agreement and after a minute or so you should find the newly created package in a file named oracle-java8-jdk_8u25_amd64.deb that you can install on as many systems as you like.

After installing the package, verify that it's active:

$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
$

If you have multiple JDKs installed, you can switch between them using the update-java-alternatives utility. To do this, you'll need the list of installed JDKS:

$ update-java-alternatives -l
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1069 /usr/lib/jvm/java-1.8.0-openjdk-amd64
jdk-8-oracle-x64 318 /usr/lib/jvm/jdk-8-oracle-x64
$

Pick the JDK you want from the list and activate it:

$ sudo update-java-alternatives -s jdk-8-oracle-x64

After that, run java -version again and the JDK you selected should be active. Note that when using Debian's alternatives mechanism, there is usually no need to set the $JAVA_HOME environment variable or to change your $PATH.

social