在 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: javac 使用 -help 获取可能的选项列表跨度> 试试这个来自 src 的javac `find * -name '*.java'` 你应该从 src 编译而不是从 'a' 文件夹的东西也不起作用。我在 src 和 a 中试过那个。

以上是关于在 CentOS 6 中设置 JAVA_HOME 和 CLASSPATH的主要内容,如果未能解决你的问题,请参考以下文章

Docker:如何在 Centos 6.8 docker 文件中设置和使用 python 2.7

如何在 macOS 中设置 JAVA_HOME 环境变量 [重复]

为啥我不能在 Ubuntu 12.04 中设置 JAVA_HOME VARIABLE?

如何在centos 7中设置ntp 服务

在 CentOS 7 中设置 PHP 的默认版本

如何在eclipse中设置classpath