Почему 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 все еще указывает на открытие jdk, а не на мой jdk 7?

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

3 ответа

Решение

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

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

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

echo $PATH

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

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

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

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

У меня была такая же проблема, и ответ скрыт в ПУТИ:

Запуск "$ 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-версия" по-прежнему показывают:

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

Я лично столкнулся с точно такой же проблемой на новой установке Ubuntu 12.04. Все, что мне нужно было сделать, это удалить конкретный пакет с помощью следующей команды:

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

Это удалило ссылку в /etc/alternatives и обновило ее до установленной Java 1.7

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

Другие вопросы по тегам