To run Java applications on Rackspace Cloud Servers you will need a copy of the JRE (Java Runtime Environment) or the JDK (Java Development Kit) installed on your server. Most Linux distributions include an open source version of the JDK, but it can still necessary to install the Oracle version of the JRE or JDK in some cases to satisfy compatibility requirements for some software.
We'll walk you through installing the latest version of the JDK to your system.
First, download a copy of the installation file from the Oracle website, then copy it to your server. Look for the "linux-x64" rpm for the JDK in the list, with a name like "jdk-7u1-linux-x64.rpm".
Once you have downloaded the JDK installation file you can install it with this command: "sudo rpm -ivh </path/jdk_file.rpm>". For example:
$ sudo rpm -ivh jdk-7u1-linux-x64.rpm
Preparing... ########################################### [100%]
1:jdk ########################################### [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
This will install the JDK to a directory named after the JDK version. At the time of this writing the version is 1.7.0_01, so the directory used is /usr/java/jdk1.7.0_01.
Looking in /usr/java you may notice that there are two symbolic links to /usr/java/jdk1.7.0_01. One is /usr/java/default and the other is /usr/java/latest. The multiple aliases are there because you can have different versions of JDK installed to one system. As the names indicate, you can link the default JDK to any version you prefer while the "latest" is linked to the highest JDK version installed on your system. This is useful and we are going to talk about it in a minute.
The JDK comes with many tools and libraries. To make your Java applications work properly it is essential to set these up properly. Unforunately the installation does not do the configuration for us. We have to manually configure the system.
Use your favourite text editor such as nano or vi to add these two lines to "/etc/environment".
CLASSPATH=/usr/java/latest/lib/ JAVA_HOME=/usr/java/latest
The "latest" here indicates we use the highest version installed on the system. You can change it to "default" or any other version available on your Cloud Server.
Once you've made the change you'll want to have your terminal session re-read the environment variables with the command:
source /etc/environment
As many other Linux distros do, Fedora uses "alternatives" to maintain symbolic links to default commands, libraries and man pages. Because the default installation does not create any symbolic links to the system paths you will need to create them manually.
Let's create some directories if they do not already exist by running:
sudo mkdir -p /usr/lib/jvm /usr/lib/jvm-exports
Now you can add JRE and JDK symbolic links to the system in one fell swoop by copying and pasting the following commands into your terminal window. First:
sudo alternatives --install /usr/bin/java java /usr/java/latest/bin/java 15000 \ --slave /usr/lib/jvm/jre jre /usr/java/latest/jre \ --slave /usr/lib/jvm-exports/jre jre_exports /usr/java/latest/jre/lib \ --slave /usr/bin/keytool keytool /usr/java/latest/jre/bin/keytool \ --slave /usr/bin/orbd orbd /usr/java/latest/jre/bin/orbd \ --slave /usr/bin/pack200 pack200 /usr/java/latest/jre/bin/pack200 \ --slave /usr/bin/rmid rmid /usr/java/latest/jre/bin/rmid \ --slave /usr/bin/rmiregistry rmiregistry /usr/java/latest/jre/bin/rmiregistry \ --slave /usr/bin/servertool servertool /usr/java/latest/jre/bin/servertool \ --slave /usr/bin/tnameserv tnameserv /usr/java/latest/jre/bin/tnameserv \ --slave /usr/bin/unpack200 unpack200 /usr/java/latest/jre/bin/unpack200 \ --slave /usr/share/man/man1/java.1 java.1 /usr/java/latest/man/man1/java.1 \ --slave /usr/share/man/man1/keytool.1 keytool.1 /usr/java/latest/man/man1/keytool.1 \ --slave /usr/share/man/man1/orbd.1 orbd.1 /usr/java/latest/man/man1/orbd.1 \ --slave /usr/share/man/man1/pack200.1 pack200.1 /usr/java/latest/man/man1/pack200.1 \ --slave /usr/share/man/man1/rmid.1.gz rmid.1 /usr/java/latest/man/man1/rmid.1 \ --slave /usr/share/man/man1/rmiregistry.1 rmiregistry.1 /usr/java/latest/man/man1/rmiregistry.1 \ --slave /usr/share/man/man1/servertool.1 servertool.1 /usr/java/latest/man/man1/servertool.1 \ --slave /usr/share/man/man1/tnameserv.1 tnameserv.1 /usr/java/latest/man/man1/tnameserv.1 \ --slave /usr/share/man/man1/unpack200.1 unpack200.1 /usr/java/latest/man/man1/unpack200.1
And then:
sudo alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 15000 \ --slave /usr/lib/jvm/java java_sdk /usr/java/latest \ --slave /usr/lib/jvm-exports/java java_sdk_exports /usr/java/latest/lib \ --slave /usr/bin/appletviewer appletviewer /usr/java/latest/bin/appletviewer \ --slave /usr/bin/apt apt /usr/java/latest/bin/apt \ --slave /usr/bin/extcheck extcheck /usr/java/latest/bin/extcheck \ --slave /usr/bin/jar jar /usr/java/latest/bin/jar \ --slave /usr/bin/jarsigner jarsigner /usr/java/latest/bin/jarsigner \ --slave /usr/bin/javadoc javadoc /usr/java/latest/bin/javadoc \ --slave /usr/bin/javah javah /usr/java/latest/bin/javah \ --slave /usr/bin/javap javap /usr/java/latest/bin/javap \ --slave /usr/bin/jconsole jconsole /usr/java/latest/bin/jconsole \ --slave /usr/bin/jdb jdb /usr/java/latest/bin/jdb \ --slave /usr/bin/jhat jhat /usr/java/latest/bin/jhat \ --slave /usr/bin/jinfo jinfo /usr/java/latest/bin/jinfo \ --slave /usr/bin/jmap jmap /usr/java/latest/bin/jmap \ --slave /usr/bin/jps jps /usr/java/latest/bin/jps \ --slave /usr/bin/jrunscript jrunscript /usr/java/latest/bin/jrunscript \ --slave /usr/bin/jsadebugd jsadebugd /usr/java/latest/bin/jsadebugd \ --slave /usr/bin/jstack jstack /usr/java/latest/bin/jstack \ --slave /usr/bin/jstat jstat /usr/java/latest/bin/jstat \ --slave /usr/bin/jstatd jstatd /usr/java/latest/bin/jstatd \ --slave /usr/bin/native2ascii native2ascii /usr/java/latest/bin/native2ascii \ --slave /usr/bin/policytool policytool /usr/java/latest/bin/policytool \ --slave /usr/bin/rmic rmic /usr/java/latest/bin/rmic \ --slave /usr/bin/schemagen schemagen /usr/java/latest/bin/schemagen \ --slave /usr/bin/serialver serialver /usr/java/latest/bin/serialver \ --slave /usr/bin/wsgen wsgen /usr/java/latest/bin/wsgen \ --slave /usr/bin/wsimport wsimport /usr/java/latest/bin/wsimport \ --slave /usr/bin/xjc xjc /usr/java/latest/bin/xjc \ --slave /usr/share/man/man1/appletviewer.1 appletviewer.1 /usr/java/latest/man/man1/appletviewer.1 \ --slave /usr/share/man/man1/apt.1 apt.1 /usr/java/latest/man/man1/apt.1 \ --slave /usr/share/man/man1/extcheck.1 extcheck.1 /usr/java/latest/man/man1/extcheck.1 \ --slave /usr/share/man/man1/jar.1 jar.1 /usr/java/latest/man/man1/jar.1 \ --slave /usr/share/man/man1/jarsigner.1 jarsigner.1 /usr/java/latest/man/man1/jarsigner.1 \ --slave /usr/share/man/man1/javac.1 javac.1 /usr/java/latest/man/man1/javac.1 \ --slave /usr/share/man/man1/javadoc.1 javadoc.1 /usr/java/latest/man/man1/javadoc.1 \ --slave /usr/share/man/man1/javah.1 javah.1 /usr/java/latest/man/man1/javah.1 \ --slave /usr/share/man/man1/javap.1 javap.1 /usr/java/latest/man/man1/javap.1 \ --slave /usr/share/man/man1/jconsole.1 jconsole.1 /usr/java/latest/man/man1/jconsole.1 \ --slave /usr/share/man/man1/jdb.1 jdb.1 /usr/java/latest/man/man1/jdb.1 \ --slave /usr/share/man/man1/jhat.1 jhat.1 /usr/java/latest/man/man1/jhat.1 \ --slave /usr/share/man/man1/jinfo.1 jinfo.1 /usr/java/latest/man/man1/jinfo.1 \ --slave /usr/share/man/man1/jmap.1 jmap.1 /usr/java/latest/man/man1/jmap.1 \ --slave /usr/share/man/man1/jps.1 jps.1 /usr/java/latest/man/man1/jps.1 \ --slave /usr/share/man/man1/jrunscript.1 jrunscript.1 /usr/java/latest/man/man1/jrunscript.1 \ --slave /usr/share/man/man1/jsadebugd.1 jsadebugd.1 /usr/java/latest/man/man1/jsadebugd.1 \ --slave /usr/share/man/man1/jstack.1 jstack.1 /usr/java/latest/man/man1/jstack.1 \ --slave /usr/share/man/man1/jstat.1 jstat.1 /usr/java/latest/man/man1/jstat.1 \ --slave /usr/share/man/man1/jstatd.1 jstatd.1 /usr/java/latest/man/man1/jstatd.1 \ --slave /usr/share/man/man1/native2ascii.1 native2ascii.1 /usr/java/latest/man/man1/native2ascii.1 \ --slave /usr/share/man/man1/policytool.1 policytool.1 /usr/java/latest/man/man1/policytool.1 \ --slave /usr/share/man/man1/rmic.1 rmic.1 /usr/java/latest/man/man1/rmic.1 \ --slave /usr/share/man/man1/schemagen.1 schemagen.1 /usr/java/latest/man/man1/schemagen.1 \ --slave /usr/share/man/man1/serialver.1 serialver.1 /usr/java/latest/man/man1/serialver.1 \ --slave /usr/share/man/man1/wsgen.1 wsgen.1 /usr/java/latest/man/man1/wsgen.1 \ --slave /usr/share/man/man1/wsimport.1 wsimport.1 /usr/java/latest/man/man1/wsimport.1 \ --slave /usr/share/man/man1/xjc.1 xjc.1 /usr/java/latest/man/man1/xjc.1
These two commands look scarily long, but they follow the pattern of link + name + path. Take a close look at each line and compare them and it should be a bit easier to understand what they're doing.
The number 15000 is the priority number for the alternative. You can set it to any integer if you prefer another value. It is only important to change the priority when you have more than one JDK installed. The system will choose the alternative with the lowest value for its priority if you set it to auto (so "10" has a higher priority than "20", for example).
To make sure the alternatives are set up correctly you can run a couple checks.
First check the "java" command:
alternatives --display java
The output should look similar to this (truncated for length):
java - status is auto. link currently points to /usr/java/latest/bin/java /usr/java/latest/bin/java - priority 15000 slave jre: /usr/java/latest/jre slave jre_exports: /usr/java/latest/jre/lib slave keytool: /usr/java/latest/jre/bin/keytool ...........
Next run the test on the "javac" command:
alternatives --display javac
That output should look something like:
javac - status is manual. link currently points to /usr/java/latest/bin/javac /usr/java/latest/bin/javac - priority 15000 slave java_sdk: /usr/java/latest slave java_sdk_exports: /usr/java/latest/lib slave appletviewer: /usr/java/latest/bin/appletviewer slave apt: /usr/java/latest/bin/apt ...........
To make sure you can execute the "java" command you can run a quick version test:
java -version
The output should be the version of the JDK you have installed.
If you need to switch between versions of the JDK (if more than one JDK is installed), run these two commands:
sudo alternatives --config java sudo alternatives --config javac
That's all done. You should be able to run "java" (the runtime environment) and "javac" (the compiler) with no problems. We hope you will enjoy the Java experience with Rackspace Cloud Servers.
© 2011-2013 Rackspace US, Inc.
Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License

1 Comment
A script
#!/bin/bash
# From http://www.rackspace.com/knowledge_center/article/how-to-install-the-oracle-jdk-on-fedora-15-16
# Dave Yost 2012-09-17
if sudo date ; then
echo "[ Install the jdk dir from the .rpm file ]"
echo "[ sudo rpm -iv --force jdk-7u7-linux-x64.rpm ]"
sudo rpm -iv --force jdk-7u7-linux-x64.rpm
echo "[ sudo echo JAVA_HOME=/usr/java/default >> /etc/environment ]"
sudo sh -c "echo JAVA_HOME=/usr/java/default >> /etc/environment"
echo "[ sudo echo CLASSPATH=/usr/java/default/lib/ >> /etc/environment ]"
sudo sh -c "echo CLASSPATH=/usr/java/default/lib/ >> /etc/environment"
echo "[ source /etc/environment ]"
source /etc/environment
# Lower numbers have higher priority, so you can't use a number based on
# the version number. I say do not use the alternatives system's
# auto mode for choosing which version to execute. Set it manually as below.
PRIORITY=10
echo "[ Tell the alternatives system about java (for the runtime) and javac (for development). ]"
echo "[ sudo alternatives --install /usr/bin/java java /usr/java/default/bin/java $PRIORITY ... ]"
sudo alternatives --install /usr/bin/java java /usr/java/default/bin/java $PRIORITY \
--slave /usr/lib/jvm/jre jre /usr/java/default/jre \
--slave /usr/lib/jvm-exports/jre jre_exports /usr/java/default/jre/lib \
--slave /usr/bin/keytool keytool /usr/java/default/jre/bin/keytool \
--slave /usr/bin/orbd orbd /usr/java/default/jre/bin/orbd \
--slave /usr/bin/pack200 pack200 /usr/java/default/jre/bin/pack200 \
--slave /usr/bin/rmid rmid /usr/java/default/jre/bin/rmid \
--slave /usr/bin/rmiregistry rmiregistry /usr/java/default/jre/bin/rmiregistry \
--slave /usr/bin/servertool servertool /usr/java/default/jre/bin/servertool \
--slave /usr/bin/tnameserv tnameserv /usr/java/default/jre/bin/tnameserv \
--slave /usr/bin/unpack200 unpack200 /usr/java/default/jre/bin/unpack200 \
--slave /usr/share/man/man1/java.1 java.1 /usr/java/default/man/man1/java.1 \
--slave /usr/share/man/man1/keytool.1 keytool.1 /usr/java/default/man/man1/keytool.1 \
--slave /usr/share/man/man1/orbd.1 orbd.1 /usr/java/default/man/man1/orbd.1 \
--slave /usr/share/man/man1/pack200.1 pack200.1 /usr/java/default/man/man1/pack200.1 \
--slave /usr/share/man/man1/rmid.1.gz rmid.1 /usr/java/default/man/man1/rmid.1 \
--slave /usr/share/man/man1/rmiregistry.1 rmiregistry.1 /usr/java/default/man/man1/rmiregistry.1 \
--slave /usr/share/man/man1/servertool.1 servertool.1 /usr/java/default/man/man1/servertool.1 \
--slave /usr/share/man/man1/tnameserv.1 tnameserv.1 /usr/java/default/man/man1/tnameserv.1 \
--slave /usr/share/man/man1/unpack200.1 unpack200.1 /usr/java/default/man/man1/unpack200.1
echo "[ sudo alternatives --install /usr/bin/javac javac /usr/java/default/bin/javac $PRIORITY ... ]"
sudo alternatives --install /usr/bin/javac javac /usr/java/default/bin/javac $PRIORITY \
--slave /usr/lib/jvm/java java_sdk /usr/java/default \
--slave /usr/lib/jvm-exports/java java_sdk_exports /usr/java/default/lib \
--slave /usr/bin/appletviewer appletviewer /usr/java/default/bin/appletviewer \
--slave /usr/bin/apt apt /usr/java/default/bin/apt \
--slave /usr/bin/extcheck extcheck /usr/java/default/bin/extcheck \
--slave /usr/bin/jar jar /usr/java/default/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/java/default/bin/jarsigner \
--slave /usr/bin/javadoc javadoc /usr/java/default/bin/javadoc \
--slave /usr/bin/javah javah /usr/java/default/bin/javah \
--slave /usr/bin/javap javap /usr/java/default/bin/javap \
--slave /usr/bin/jconsole jconsole /usr/java/default/bin/jconsole \
--slave /usr/bin/jdb jdb /usr/java/default/bin/jdb \
--slave /usr/bin/jhat jhat /usr/java/default/bin/jhat \
--slave /usr/bin/jinfo jinfo /usr/java/default/bin/jinfo \
--slave /usr/bin/jmap jmap /usr/java/default/bin/jmap \
--slave /usr/bin/jps jps /usr/java/default/bin/jps \
--slave /usr/bin/jrunscript jrunscript /usr/java/default/bin/jrunscript \
--slave /usr/bin/jsadebugd jsadebugd /usr/java/default/bin/jsadebugd \
--slave /usr/bin/jstack jstack /usr/java/default/bin/jstack \
--slave /usr/bin/jstat jstat /usr/java/default/bin/jstat \
--slave /usr/bin/jstatd jstatd /usr/java/default/bin/jstatd \
--slave /usr/bin/native2ascii native2ascii /usr/java/default/bin/native2ascii \
--slave /usr/bin/policytool policytool /usr/java/default/bin/policytool \
--slave /usr/bin/rmic rmic /usr/java/default/bin/rmic \
--slave /usr/bin/schemagen schemagen /usr/java/default/bin/schemagen \
--slave /usr/bin/serialver serialver /usr/java/default/bin/serialver \
--slave /usr/bin/wsgen wsgen /usr/java/default/bin/wsgen \
--slave /usr/bin/wsimport wsimport /usr/java/default/bin/wsimport \
--slave /usr/bin/xjc xjc /usr/java/default/bin/xjc \
--slave /usr/share/man/man1/appletviewer.1 appletviewer.1 /usr/java/default/man/man1/appletviewer.1 \
--slave /usr/share/man/man1/apt.1 apt.1 /usr/java/default/man/man1/apt.1 \
--slave /usr/share/man/man1/extcheck.1 extcheck.1 /usr/java/default/man/man1/extcheck.1 \
--slave /usr/share/man/man1/jar.1 jar.1 /usr/java/default/man/man1/jar.1 \
--slave /usr/share/man/man1/jarsigner.1 jarsigner.1 /usr/java/default/man/man1/jarsigner.1 \
--slave /usr/share/man/man1/javac.1 javac.1 /usr/java/default/man/man1/javac.1 \
--slave /usr/share/man/man1/javadoc.1 javadoc.1 /usr/java/default/man/man1/javadoc.1 \
--slave /usr/share/man/man1/javah.1 javah.1 /usr/java/default/man/man1/javah.1 \
--slave /usr/share/man/man1/javap.1 javap.1 /usr/java/default/man/man1/javap.1 \
--slave /usr/share/man/man1/jconsole.1 jconsole.1 /usr/java/default/man/man1/jconsole.1 \
--slave /usr/share/man/man1/jdb.1 jdb.1 /usr/java/default/man/man1/jdb.1 \
--slave /usr/share/man/man1/jhat.1 jhat.1 /usr/java/default/man/man1/jhat.1 \
--slave /usr/share/man/man1/jinfo.1 jinfo.1 /usr/java/default/man/man1/jinfo.1 \
--slave /usr/share/man/man1/jmap.1 jmap.1 /usr/java/default/man/man1/jmap.1 \
--slave /usr/share/man/man1/jps.1 jps.1 /usr/java/default/man/man1/jps.1 \
--slave /usr/share/man/man1/jrunscript.1 jrunscript.1 /usr/java/default/man/man1/jrunscript.1 \
--slave /usr/share/man/man1/jsadebugd.1 jsadebugd.1 /usr/java/default/man/man1/jsadebugd.1 \
--slave /usr/share/man/man1/jstack.1 jstack.1 /usr/java/default/man/man1/jstack.1 \
--slave /usr/share/man/man1/jstat.1 jstat.1 /usr/java/default/man/man1/jstat.1 \
--slave /usr/share/man/man1/jstatd.1 jstatd.1 /usr/java/default/man/man1/jstatd.1 \
--slave /usr/share/man/man1/native2ascii.1 native2ascii.1 /usr/java/default/man/man1/native2ascii.1 \
--slave /usr/share/man/man1/policytool.1 policytool.1 /usr/java/default/man/man1/policytool.1 \
--slave /usr/share/man/man1/rmic.1 rmic.1 /usr/java/default/man/man1/rmic.1 \
--slave /usr/share/man/man1/schemagen.1 schemagen.1 /usr/java/default/man/man1/schemagen.1 \
--slave /usr/share/man/man1/serialver.1 serialver.1 /usr/java/default/man/man1/serialver.1 \
--slave /usr/share/man/man1/wsgen.1 wsgen.1 /usr/java/default/man/man1/wsgen.1 \
--slave /usr/share/man/man1/wsimport.1 wsimport.1 /usr/java/default/man/man1/wsimport.1 \
--slave /usr/share/man/man1/xjc.1 xjc.1 /usr/java/default/man/man1/xjc.1
echo "[ Look over what we did. ]"
echo "[ sudo alternatives --display java ]"
sudo alternatives --display java
echo "[ sudo alternatives --display javac ]"
sudo alternatives --display javac
echo
echo "[ Run these two commands and select the java version you want.
sudo alternatives --config java
sudo alternatives --config javac"
fi
Add new comment