为什么 java -version 返回的版本与 JAVA_HOME 中定义的版本不同?

为什么 java -version 返回的版本与 JAVA_HOME 中定义的版本不同?

JAVA_HOME我正在尝试在 Ubuntu 操作系统中进行设置。我已jdk 1.7复制/usr/lib/jvm并设置了JAVA_HOME文件/etc/profile

文件夹内容/usr/lib/jvm如下:

shekhar@ubuntu:~$ ls /usr/lib/jvm/
default-java        java-1.6.0-openjdk       java-6-openjdk         java-6-openjdk-i386  jdk1.7.0_01
java-1.5.0-gcj-4.6  java-1.6.0-openjdk-i386  java-6-openjdk-common  java-7-openjdk-i386

文件的最后几行/etc/profile如下:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_01
export PATH=$PATH:$JAVA_HOME/bin

完成所有这些后,当我运行java -version命令时,我得到以下输出:

shekhar@ubuntu:~$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)

当我运行ls -lah命令时,我得到以下输出:

shekhar@ubuntu:~$ ls -lah /usr/bin/java
lrwxrwxrwx 1 root root 22 Sep 29 09:58 /usr/bin/java -> /etc/alternatives/java
shekhar@ubuntu:~$ ls -lah /etc/alternatives/java
lrwxrwxrwx 1 root root 45 Sep 29 09:58 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java

有人能告诉我我遗漏了什么吗?为什么 Ubuntu 仍然指向 open jdk 而不是我的 jdk 7?

PS:我见过这类似问题及其答案,但该问题与 Windows 操作系统有关,而与 Ubuntu 无关,所以我重新发布了针对 Ubuntu 的类似问题。

答案1

您设置了 JAVA_HOME 环境变量,然后使用它来设置 PATH。但是,您设置的路径也由现有路径组成。本质上,您只是在现有路径中添加了其他内容。

路径末尾添加了 JDK1.7 的路径。在命令行中输入“java --version”时,系统会从头到尾搜索该路径,直到找到包含命令“java”的路径。因此,您看到的是来自其他 Java 版本之一的版本输出。

我在 Ubuntu 上通常会做的是查看我的路径:

echo $PATH

然后在开头附近寻找可能的 JVM 路径。此时,您将有几种方法可以解决此问题:

  1. 创建一个将系统指向新 Java 路径的符号链接。

  2. 删除旧的 Java 版本并将其从您的路径中删除。

我会选择选项 2。删除不需要的东西不会造成太多困惑。

答案2

我遇到了同样的问题,答案隐藏在 PATH 中:

运行“$ env | grep java”显示:

PATH=/u01/app/oracle/product/11.2.0/xe/bin:/home/rivaldo/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/java/jdk1.6.0_14/bin:/home/rivaldo/bin/eclipse.JEE.Kepler.64
JAVA_HOME=/usr/local/java/jdk1.6.0_14
JDK_HOME=/usr/local/java/jdk1.6.0_14

但运行“java -version”仍然显示:

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

我发现我的 PATH 在“/java/jdk1.6.0_14/bin”之前有“/usr/bin”,执行“ll /usr/bin | grep java”后我得到:

lrwxrwxrwx 1 root root 39 Jul 31 08:29 /etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java*

我将符号链接更改为正确的链接,问题就解决了。您也可以更改路径的顺序:

export PATH=$PATH:$JAVA_HOME/bin

export PATH=$JAVA_HOME/bin:$PATH

答案3

我个人在全新安装 Ubuntu 12.04 时也遇到了同样的问题。我所要做的就是使用以下命令卸载特定软件包:

sudo apt-get remove openjdk-6-jre-headless

这删除了 ​​/etc/alternatives 中的链接并将其更新为已安装的 java 1.7

只是想分享,因为这完成了 jmort253 答案中的第 2 点。

相关内容