Почему 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 в начале. В этот момент у вас будет несколько вариантов исправить это:
Создайте символическую ссылку, указывающую систему на ваш новый путь Java.
Удалите старую версию 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.