Почему 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?

P.S. Я виделэто похожевопрос и ответы на него, но этот вопрос относится к ОС 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 "/usr/bin" стоит перед "/java/jdk1.6.0_14/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

Просто хотел поделиться, поскольку это завершает пункт 2 в ответе jmort253.

Связанный контент