為什麼 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)

我發現我的路徑在“/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 點。

相關內容