![Почему java -version возвращает версию, отличную от той, которая определена в JAVA_HOME?](https://rvso.com/image/1331450/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20java%20-version%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D1%82%20%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E%2C%20%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%BD%D1%83%D1%8E%20%D0%BE%D1%82%20%D1%82%D0%BE%D0%B9%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%B0%D1%8F%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B0%20%D0%B2%20JAVA_HOME%3F.png)
Я пытаюсь установить 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 в начале. В этот момент у вас будет несколько вариантов исправить это:
Создайте символическую ссылку, указывающую системе на новый путь Java.
Удалите старую версию 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.