This post shows how to install Sun's java implementation alongside the Linux default GNU java.
Installing Sun Java alongside the default GNU java
Sun's java isn't installed by default on RedHat systems. This is because Sun hasn't licensed it for RedHat's distribution. Instead, Linux ships with an open source alternative, GNU Java. It's based on Sun's Java implementation, and--in part because of that--it's always a version or two behind Sun. In all, it's a very good implementation, but sometimes--as in the case with DSpace--it's necessary to use Sun's Java, instead.
We don't want to remove the Gnu Java; we'll install Sun's alongside it.
Download the files
The first file we need is Sun's java implementation. In this example, we'll be referencing JDK 1.6.0 release 4, but the steps are the same for all versions.
Links to Sun's most recent download packages can be found here.
The second file is a compatibility package from www.jpackage.org. This simply creates a bunch of symbolic links to bring Sun's directory locations into compliance with the GNU system.
We'll be referencing java-1.6.0-sun-compat-1.6.0.04-1jpp.i586.rpm, which works with the version of Sun's Java discussed above (1.6.0_4). Whichever version you're using, you'll need to visit the jpackage web site to download it.
JPackage has managed, somehow to make their downloads almost as inscrutable as Sun's. Their instructions page, though, has good pointers to all the correct downloads.
If you run into problems either finding the correct sun-compat package, or if you're running a distro (such as 64-bit RHEL) for which JPackage hasn't created a sun-compat package, you're not out of luck. We'll also look at how to configure alternatives manually, at least for basic java usage.
Install the Packages
Install Sun Java
Sun packages its distributions in a self-extracting binary file. Simply execute the .bin file from the command line:
This will take awhile. When it's finished, Sun's Java will be installed.
You can see, however, that the GNU java still is active by typing the following command
Install Sun Campatibility
java-1.6.0-sun-compat-1.6.0.04-1jpp.i586.rpm is signed by jpackage.org, so the easiest way to install the package is to import the jpackage.org key:
rpm --import http://jpackage.org/jpackage.asc
If you don't want to do this (and thus trust all Jpackage.org rpm packages), you'll need to use RPM instead of yum to install it.
Then, simply install the package:
yum install java-1.6.0-sun-compat-1.6.0.04-1jpp.i586.rpm
Configure Alternatives manuallyIf you've not found the correct JPackage sun-compat package, or if one isn't available, it's still quite possible to use the alternatives system to manage your java versions.
Alternatives is configured at the command line:
So, to get straight to the meat of the matter:
alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_11/bin/java 120 \ --slave /usr/bin/keytool keytool /usr/java/jdk1.6.0_11/bin/keytool \ --slave /usr/bin/rmiregistry rmiregistry /usr/java/jdk1.6.0_11/bin/rmiregistry alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_11/bin/javac 120 \ --slave /usr/bin/jar jar /usr/java/jdk1.6.0_11/bin/jar \ --slave /usr/bin/rmic rmic /usr/java/jdk1.6.0_11/bin/rmic
The above will create two entries in the alternatives symlink config system, one for java (with some "slave" symlinks for dependent apps), and one for javac (likewise with slave symlinks).
By and large, the above should be what's necessary to run java.
Check the active Java Version
Now we need to verify that Sun's java is the default (using the java -version command):
$ java -version java version "1.6.0_04" Java(TM) SE Runtime Environment (build 1.6.0_04-b12) Java HotSpot(TM) Server VM (build 10.0-b19, mixed mode)
Above, we see that Sun's Java v 1.6.0 r4 is the default java. If, however, we see something like the following,
# java -version java version "1.4.2" gij (GNU libgcj) version 4.1.2 20070626 (Red Hat 4.1.2-13) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Then we have to use the alternatives program to set the correct default. Alternatives simply is a system that manages standard symbolic links, allowing you to select one or another alternative program to run for any given command. In our case, that's java.
As root, simply run the following command
alternatives --config java
you'll see something like the following:
# alternatives --config java There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- + 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java * 2 /usr/lib/jvm/jre-1.6.0-sun/bin/java Enter to keep the current selection[+], or type selection number:
The + sign next to the first line indicates that the GNU Compiler for Java (GCJ) is the default. Simply type the number 2 and press enter to make the Sun Java distro be the default.