Почему java -version возвращает версию, отличную от версии, определенной в JAVA_HOME?

5876
Shekhar

Я пытаюсь установить JAVA_HOMEв Ubuntu OS. Я скопировал 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 все еще указывает на открытие jdk, а не на мой jdk 7?

PS: я видел этот похожий вопрос и ответы на него, но этот вопрос относится к ОС Windows, а не к Ubuntu, поэтому я публикую этот похожий вопрос для Ubuntu.

2

3 ответа на вопрос

3
jmort253

Вы устанавливаете переменную среды JAVA_HOME, а затем используете ее для установки своего PATH. Однако заданный вами путь также состоит из существующего пути. По сути, вы просто добавили что-то еще к существующему пути.

Путь к вашему JDK1.7 добавляется в конце пути. Когда вы набираете 'java --version' в командной строке, система ищет путь от начала до конца, пока не найдет путь с командой 'java'. Поэтому то, что вы видите, - это вывод версии из одной из ваших других версий Java.

Что я обычно делаю в Ubuntu, так это посмотрите на мой путь:

echo $PATH 

а затем найдите возможные пути JVM в начале. В этот момент у вас будет несколько вариантов исправить это:

  1. Создайте символическую ссылку, указывающую систему на ваш новый путь Java.

  2. Удалите старую версию Java и удалите ее с вашего пути.

Я бы выбрал вариант 2. Менее запутанно просто избавиться от того, что вам не нужно.

Привет, ты был прав. Каким-то образом есть другой открытый jdk, установленный до моей версии 1.7. Я просто переставил переменную PATH, чтобы сначала вывести мой jdk в PATH. Теперь работает нормально. Спасибо... Shekhar 11 лет назад 1
2
Chris

I personally was facing exactly the same kind of problem on a fresh Ubuntu 12.04 install. All I had to do is to uninstall a specific package using the following command:

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

This removed the link in the /etc/alternatives and updated it to the installed java 1.7

Just wanted to share as this completes point 2 in jmort253's answer.

1
Ricardo Rivaldo

I had the same problem, and the answer is hidden in the PATH:

running "$ env | grep java" shows:

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 

but running "java -version" still show:

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) 

I figured out that my PATH has "/usr/bin" before "/java/jdk1.6.0_14/bin" and doing "ll /usr/bin | grep java" i got:

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

I changed the simbolic link to the correct one and problem solved. You may also change the order at path:

from

export PATH=$PATH:$JAVA_HOME/bin 

to

export PATH=$JAVA_HOME/bin:$PATH