在 CentOS 6 中设置 JAVA_HOME 和 CLASSPATH
Posted
技术标签:
【中文标题】在 CentOS 6 中设置 JAVA_HOME 和 CLASSPATH【英文标题】:setting JAVA_HOME & CLASSPATH in CentOS 6 【发布时间】:2013-04-22 16:28:39 【问题描述】:我已经在 /usr/java/ 中解压了我的 jdk。
然后我将 CLASSPATH、PATH、JAVA_HOME 放入 /etc/profile 中,如下所示。
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
当我在 /usr/java/jdk1.0.7_21/bin 中编译一些 java 文件时,
它有效。但是当我在其他文件夹上做同样的事情时,它不会。
它显示 NoClassDefFoundError。
所以我已经通过 echo 检查了 ClassPATH、PATH、JAVA_HOME。
如下图所示。
[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
我想在控制台中使用java,这种情况我该怎么办?
提前致谢。
PS。当然我做了source /etc/profile
。
=================我面临的错误====================== =
当我命令 java A 时(我的类名是 A)。
Error: Could not find or load main class A
case I 命令 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)
=====================我的代码的全部内容===================== ================== java部分。路径是 /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 部分。左边部分是默认的。
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
其他部分可能有助于解决。
which java
打印“/usr/java/bin”。有符号链接。
我的 jdk 位置是 /usr/java/jdk1.7.0_21。在 ./bin 中,每个代码都可以正常工作。
我没有接触 /root/.bash_profile。我刚刚编辑了 /etc/profile。
感谢您的关注。即使它没有想通。您的帮助对我很有帮助:D 再次感谢。
【问题讨论】:
您是否从控制台检查过 java -version 和 javac -version?? @prasanth 是的,它运行良好并显示正确的消息。我目前正在使用 1.7.0_19。谢谢提问 你能发布你错误的完整堆栈跟踪吗? @prasanth 我在文章中添加了我的具体情况。 您的课程在哪个包中??它在'a'里面吗?那就试试java a.A
。
【参考方案1】:
如果javac
是通过/etc/alternatives/javac
设置的,你可以添加到你的.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
【讨论】:
【参考方案2】:说明:
-
点击桌面面板中的终端图标打开终端
窗口并访问命令提示符。
键入命令
which java
查找Java 的路径
可执行文件。
输入命令su -
成为root用户。
输入命令vi /root/.bash_profile
打开系统
Vi 文本编辑器中的 bash_profile 文件。您可以将 vi 替换为
您首选的文本编辑器。
在文件底部键入export JAVA_HOME=/usr/local/java/
。
将/usr/local/java
替换为在第二步中找到的位置。
保存并关闭 bash_profile 文件。
键入命令exit
关闭根会话。
退出系统并重新登录。
键入命令echo $JAVA_HOME
以确保已设置路径
正确。
set java_home in centos
【讨论】:
我按照它说的做了,但是在那之后(包括重新启动和重新登录),当我输入 echo $JAVA_HOME 时,它什么也没显示。但有些情况发生了变化。例如,我不再需要 -cp 选项了,谢谢:D【参考方案3】:执行以下步骤:
-
sudo -s
yum install java-1.8.0-openjdk-devel
vi .bash_profile ,
并将以下行添加到 .bash_profile 文件中并保存文件。
出口 JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/
注意 - 我使用 CentOS7 作为操作系统。
【讨论】:
【参考方案4】:搜索here 获取centos jre 安装所有用户:
在 CentOS 中设置环境变量的最简单方法是使用 export as in
$> export JAVA_HOME=/usr/java/jdk.1.5.0_12
$> export PATH=$PATH:$JAVA_HOME
但是,以这种方式设置的变量是暂时的,即它们会在您退出 shell 的那一刻消失。显然,这在设置即使在系统重新启动时也需要保留的环境变量时没有帮助。
在这种情况下,您需要在系统范围的配置文件中设置变量。在 CentOS(我使用的是 v5.2)中,文件夹 /etc/profile.d/ 是向系统配置文件添加自定义的推荐位置。
例如,在安装 Sun JDK 时,您可能需要设置 JAVA_HOME 和 JRE_HOME 环境变量。在这种情况下:
创建一个名为 java.sh
的新文件
vim /etc/profile.d/java.sh
在这个文件中,初始化必要的环境变量
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
现在,当您重新启动机器时,java.sh 中的环境变量将自动初始化(如果您想知道 /etc/profile.d/ 中的文件是如何加载的,请查看 /etc/profile)。
PS:如果想在不重启机器的情况下加载java.sh
内的环境变量,可以使用source命令如下:
$> source java.sh
【讨论】:
谢谢伙计。像微风一样工作。我添加到 java.sh t 并在命令行上复制粘贴相同的内容,实际上立即启用它。【参考方案5】:我必须更改 /etc/profile.d/java_env.sh 以指向新路径,然后注销/登录。
【讨论】:
【参考方案6】:我在 /home/prasanth 中创建了一个名为 a 的文件夹,并将您的代码复制到一个名为 A.java 的文件中。我从 /home/prasanth 编译为 javac a/A.java
并运行 javac a.A
。我的输出为
a!
【讨论】:
是的,这很正常,不幸的是我的除外。我浪费了一整天,完全筋疲力尽:- 你是对的。我必须不在文件夹中使用 java 命令,而是在其父文件夹中使用“src”。昨天太紧张了,所以没有正确测试,我想。再次感谢:D 但是我仍然不知道为什么我无法在包文件夹中执行。如果您有任何想法,请告诉我^^ 删除package a;
声明,您将能够从您的包文件夹运行。【参考方案7】:
您的环境变量似乎没有任何问题。
用
从 src 编译你的文件javac a/A.java
然后,运行你的程序
java a.A
【讨论】:
[root@localhost a]# javac a/A.java javac: file not found: aAjava Usage: javacjavac `find * -name '*.java'`
你应该从 src 编译而不是从 'a'
文件夹的东西也不起作用。我在 src 和 a 中试过那个。以上是关于在 CentOS 6 中设置 JAVA_HOME 和 CLASSPATH的主要内容,如果未能解决你的问题,请参考以下文章
Docker:如何在 Centos 6.8 docker 文件中设置和使用 python 2.7
如何在 macOS 中设置 JAVA_HOME 环境变量 [重复]