setting JAVA_HOME & CLASSPATH in CentOS 6

Juneyoung Oh picture Juneyoung Oh · Apr 29, 2013 · Viewed 175.2k times · Source

I have unpacked my jdk in /usr/java/.

and I put CLASSPATH, PATH, JAVA_HOME into /etc/profile like below.

export JAVA_HOME=/usr/java/jdk1.7.0_21
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

And when I compile some java file in /usr/java/jdk1.0.7_21/bin,

it works. But when I am doing same thing on other folder, it doesn't.

It displays NoClassDefFoundError.

So I have checked ClASSPATH, PATH, JAVA_HOME via echo.

It shows like below.

[root@localhost a]# echo $JAVA_HOME
/usr/java/jdk1.7.0_21
[root@localhost a]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/guest/bin:/usr/java/jdk1.7.0_21/bin:/usr/java/bin:/usr/java/jdk1.7.0_21/bin
[root@localhost a]# echo $CLASSPATH
/usr/java/jdk1.7.0_21/jre/lib/ext:/usr/java/jdk1.7.0_21/lib/tools.jar

I want to use java in console, What can I do fir this situation?

Thanks in advance.

PS. of couse I did source /etc/profile.

=================The Errors what I'm facing with =======================

when I command java A(My class name is A).

Error: Could not find or load main class A

case I command java -cp /home/guest/workspace/AAA/src/a/ A

Exception in thread "main" java.lang.NoClassDefFoundError: A (wrong name: a/A)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

=====================full content of my code====================================== java part. path is /usr/guest/workspace/AAA/src/a/A.java

package a;

public class A {
    public static void main(String[] args) {
        System.out.println("a!\n");
    }
}

/etc/profile part. left part is default.

export JAVA_HOME=/usr/java/jdk1.7.0_21
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

other parts might be helpful to solve.

  • which java prints "/usr/java/bin". there's symbolic link.
  • My jdk location is /usr/java/jdk1.7.0_21. inside of ./bin every code works fine.
  • I did not touch /root/.bash_profile. I just edited /etc/profile.

Thanks for such interest. even though it does not figured out. your help was great healing to me :D Thanks again.

Answer

asraful009 picture asraful009 · May 17, 2014

Search here for centos jre install all users:

The easiest way to set an environment variable in CentOS is to use export as in

$> export JAVA_HOME=/usr/java/jdk.1.5.0_12

$> export PATH=$PATH:$JAVA_HOME

However, variables set in such a manner are transient i.e. they will disappear the moment you exit the shell. Obviously this is not helpful when setting environment variables that need to persist even when the system reboots. In such cases, you need to set the variables within the system wide profile. In CentOS (I’m using v5.2), the folder /etc/profile.d/ is the recommended place to add customizations to the system profile. For example, when installing the Sun JDK, you might need to set the JAVA_HOME and JRE_HOME environment variables. In this case: Create a new file called java.sh

vim /etc/profile.d/java.sh

Within this file, initialize the necessary environment variables

export JRE_HOME=/usr/java/jdk1.5.0_12/jre
export PATH=$PATH:$JRE_HOME/bin

export JAVA_HOME=/usr/java/jdk1.5.0_12
export JAVA_PATH=$JAVA_HOME

export PATH=$PATH:$JAVA_HOME/bin

Now when you restart your machine, the environment variables within java.sh will be automatically initialized (checkout /etc/profile if you are curious how the files in /etc/profile.d/ are loaded).

PS: If you want to load the environment variables within java.sh without having to restart the machine, you can use the source command as in:

$> source java.sh