问题
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.
回答1:
I created a folder named a in /home/prasanth and copied your code to a file named A.java. I compiled from /home/prasanth as javac a/A.java
and run javac a.A
. I got output as
a!
回答2:
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
回答3:
Instructions:
- Click on the Terminal icon in the desktop panel to open a terminal window and access the command prompt.
- Type the command
which java
to find the path to the Java executable file. - Type the command
su -
to become the root user. - Type the command
vi /root/.bash_profile
to open the system bash_profile file in the Vi text editor. You can replace vi with your preferred text editor. - Type
export JAVA_HOME=/usr/local/java/
at the bottom of the file. Replace/usr/local/java
with the location found in step two. - Save and close the bash_profile file.
- Type the command
exit
to close the root session. - Log out of the system and log back in.
- Type the command
echo $JAVA_HOME
to ensure that the path was set correctly.
set java_home in centos
回答4:
It seems that you dont have any problem with the environmental variables.
Compile your file from src with
javac a/A.java
Then, run your program as
java a.A
回答5:
I had to change /etc/profile.d/java_env.sh to point to the new path and then logout/login.
回答6:
Do the following steps:
- sudo -s
- yum install java-1.8.0-openjdk-devel
- vi .bash_profile , and add below line into .bash_profile file and save the file.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/
Note - I am using CentOS7 as OS.
回答7:
Providing javac
is set up through /etc/alternatives/javac
, you can add to your .bash_profile:
JAVA_HOME=$(l=$(which javac) ; while : ; do nl=$(readlink ${l}) ; [ "$nl" ] || break ; l=$nl ; done ; echo $(cd $(dirname $l)/.. ; pwd) )
export JAVA_HOME
来源:https://stackoverflow.com/questions/16271316/setting-java-home-classpath-in-centos-6