【问题标题】:"which java" in CentOS prints wrong java pathCentOS 中的 "which java" 打印错误的 java 路径
【发布时间】:2013-10-28 08:46:29
【问题描述】:

我不确定为什么“which java”和“whereis java”路径不正确。我试图编辑 ~/.bash_profile 和 /etc/environment 但没有帮助。所需的路径是在下面的“echo $JAVA_HOME”中看到的,但在“which java”中没有反映出来

以下是我在 CentOS 6.4 中得到的:

哪个java

/usr/bin/java


java -version

java版本“1.7.0_45”

JAVA(TM) SE 运行时环境(内部版本 1.7.0_45-b18)

JAVA HotSpot (TM) 64 位服务器虚拟机(内部版本 24.45-b08,混合模式)


java 是哪里

java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java


回显 $JAVA_HOME

/usr/java/jdk1.7.0_45/jre => echo $JAVA_HOME 时需要显示正确


【问题讨论】:

    标签: java linux centos java-home


    【解决方案1】:

    有时通过选择所需的 java 版本,替代方案在单个命令中不起作用。不过,我不确定其确切原因..

    我成了这种情况的受害者。 自动驾驶失败,我们现在必须手动飞行..

    在您的 unix 安装中的以下两个文件中的任何一个中,添加以下变量和对 shell 脚本的调用(我在下面提供)-

    ~/.bashrc

    export JAVA_HOME=/opt/jdk1.8.0_141
    export PATH=$JAVA_HOME/bin:$PATH
    sudo bash /appl/common/toFixJava.sh
    

    /etc/profile

    export JAVA_HOME=/opt/jdk1.8.0_141
    export PATH=$JAVA_HOME/bin:$PATH
    sudo bash /appl/common/toFixJava.sh
    

    上面引用的下面的脚本将其余的 java 模块设置为利用您要使用的 java -

    toFixJava.sh

    altrs="java javac jre jarsigner javadoc javafxpackager javah javap java-rmi.cgi javaws jcmd jconsole jcontrol jdb jhat jinfo jmap jmc jmc.ini jps jrunscript jsadebugd jstack jstat jstatd jvisualvm keytool appletviewer apt ControlPanel extcheck idlj native2ascii orbd pack200 policytool rmic rmid rmiregistry schemagen serialver servertool tnameserv unpack200 wsgen wsimport xjc"
    

    对于 $altrs 中的每个 做

    alternatives --install /usr/bin/$each $each /opt/jdk1.8.0_141/bin/$each <desired installation index number, e.g. 2>
    alternatives --set $each /opt/jdk1.8.0_141/bin/$each
    

    完成

    如果这对您不起作用,请告知。我帮你解决!

    【讨论】:

      【解决方案2】:

      运行alternatives --config java 以选择您要用作默认的Java 版本。它将打印出已安装 Java 的列表以供选择。

      which java,然而,总是会打印出/usr/bin/java。这并不意味着它设置错误!观察:

      $ ls -l `which java`
      lrwxrwxrwx 1 root root 22 Oct 19 11:49 /usr/bin/java -> /etc/alternatives/java
      $ ls -l /etc/alternatives/java
      lrwxrwxrwx 1 root root 35 Oct 19 11:49 /etc/alternatives/java -> /usr/lib/jvm/jre-1.5.0-gcj/bin/java
      

      如果您使用 alternatives 更改 IcedTea 的路径,ls -l /etc/alternatives/java 将反映这一点。

      【讨论】:

      • 我试过它已经显示了所需的选择,但为什么它没有反映在“哪个java”中
      • 太棒了!谢谢你。我从没想过这与实际的 java 有符号链接。我一直觉得“哪个 java”打印错了
      • 一个更正,我不得不做 ls -l /usr/bin/java 而不是 ls -l 'which java' 但仍然感谢您的帮助。祝你好运!
      • 这些是反引号,而不是单引号,在运行 ls 命令之前计算为 '/usr/bin/java'。贝壳魔法:)
      • 非常感谢,配置和理解这些 java 路径总是一团糟
      【解决方案3】:

      您的 PATH(除此之外)决定了要查找命令的目录。在 Linux、Solaris 和 DOS 中也是如此。

      当您执行which {command} 时,它会找到您可以在其中执行命令的第一个目录。

      当您在.bashrc 中更新您的 PATH 时,您必须再次获取它以更改您当前的设置。

      【讨论】:

      • 我在编辑 bashrc 后以 root 身份尝试了“source ~/.bashrc”,它给了我“bash: export: '/usr/java/jdk1.7.0_45/jre=/usr/java/jdk1 .7.0_45/jre' : 不是一个有效的标识符
      • 这意味着您的 .bashrc 中有语法错误。我敢打赌你写了类似$JAVA_HOME=/usr/java/jdk1.7.0_45/jre 删除$ 顺便说一句这不会改变你的路径这对which很重要
      • +1 谢谢彼得。这有帮助,但我不得不接受亨利的回答,因为他解释了为什么“哪个 java”指向我误解的位置
      • 感谢彼得,这让我发疯了,我只是将 1.6 bin 路径添加到 PATH 环境变量的前缀,重新登录,现在“哪个”按预期工作。我在此处记下这一点,因为现在这是构建 android 源代码所必需的。赞赏。
      猜你喜欢
      • 1970-01-01
      • 2011-11-06
      • 2015-03-23
      • 2020-08-24
      • 2013-06-21
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多