JAVA HOME и PATH установлены, но java-версия по-прежнему показывает старый

Я использую Linux Mint Cinnamon 14. Я установил $JAVA_HOME и $PATH переменные среды в ~/.profile следующим образом:

export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=/home/aqeel/development/jdk/jdk1.6.0_35/bin:$PATH

Я тогда сделал source ~/.profile внести соответствующие изменения.

когда я выполнить java -version команда для проверки активной версии java показывает версию java по умолчанию (уже установленную open-jdk). Как я могу переопределить open-jdk по умолчанию с тем, который я загрузил?

обновление:

which java говорит / usr/bin / java

$JAVA_HOME/bin/java -version пишет 'отказано в доступе'

sudo $JAVA_HOME/bin/java -version (запрашивает пароль, затем) говорит, что команда не найдена

но cd $JAVA_HOME/bin и ls показывает, что это правильный каталог.

9 ответов


хотя похоже, что ваша настройка Верна, есть несколько вещей, чтобы проверить:

  1. выход env в частности PATH.
  2. which java говорит вам, что?
  3. есть java исполняемый в $JAVA_HOME\bin и имеет ли он набор битов execute? Если нет chmod a+x java его.

Я верю, что у вас есть source ' d ваш .profile после добавления/изменения JAVA_HOME и PATH?

кроме того, вы можете помочь себе в будущее обслуживание вашей установки JDK, пишет

export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=$JAVA_HOME/bin:$PATH
. Затем вам нужно обновить только одну переменную env при настройке установки JDK.

спасибо,


update-java-alternatives

на java исполняемый файл не найден с JAVA_HOME, это зависит только от вашего PATH.

update-java-alternatives - это хороший способ управлять им для всей системы через:

update-java-alternatives -l

пример вывода:

java-7-oracle 1 /usr/lib/jvm/java-7-oracle
java-8-oracle 2 /usr/lib/jvm/java-8-oracle

Выберите один из вариантов:

sudo update-java-alternatives -s java-7-oracle

как update-alternatives, он работает через Управление симлинк. Преимущество заключается в том, что управляет символическими ссылками на все утилиты Java на после: javac, java, javap, etc.

Я еще не видел JAVA_HOME влияние на JDK. До сих пор я видел его только в сторонних инструментах,например Maven.


$JAVA_HOME/bin / java-версия говорит "отказано в разрешении"

Если вы не можете получить доступ или запустить код, он будет проигнорирован при добавлении к вашему пути. Вам нужно сделать его доступным и доступным для запуска или получить собственную копию.

сделать

ls -ld $JAVA_HOME $JAVA_HOME/bin $JAVA_HOME/bin/java

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


когда он ищет java, он смотрит слева направо в записях пути, которые разделены: поэтому вам нужно добавить путь к последнему каталогу jdk/bin до /usr/bin, поэтому, когда он ищет, он найдет последний и прекратит поиск дальше.

т. е. путь= / usr / java / jdk_1.8 / bin: / usr / bin:..... и так далее.

затем инициализируйте Профиль пользователя с помощью команды: source ~/.файл

и проверьте с помощью: [какая java]

вы получите право один.


есть простой способ, просто удалите символическую ссылку из "/ usr / bin". Это сработает.


обновление ~/.profile или ~/.bash_profile не работает иногда. Я просто удалил JDK 6 и sourced .bash_profile.

попробуй:

sudo rm -rd jdk1.6.0_* #it may not let you delete without sudo

затем измените / добавьте переменные JAVA_HOME и PATH.

source ~/.bash_profile #assuming you've updated $JAVA_HOME and $PATH

в Linux Mint 18 Cinnamon обязательно проверьте /etc/profile.d/jdk_home.sh я переименовал этот файл в jdk_home.Ш. старый и теперь мой путь не переопределяется, и я могу вызвать java-версию и увидеть Java 9, как ожидалось. Хотя я правильно выбрал Java 9 в update-aternatives --config java Это jdk_home.sh файл продолжал переопределять $PATH при загрузке.


если вы хотите используйте JDKs, загруженные с сайта Oracle, то, что сработало для меня (с помощью Mint), использует обновление-альтернатив:

  1. я загрузил JDK и извлек его в любом месте, например в / home / aqeel / development/jdk / jdk1.6.0_35
  2. я побежал:

    sudo update-alternatives --install /usr/bin/java java /home/aqeel/development/jdk/jdk1.6.0_35/bin/java 1`
    

    теперь вы можете выполнить sudo update-alternatives --config java и выберите java версия.

  3. это не то!--6-->переменная JAVA_HOME, который я хотел настроить, поэтому я просто добавил его в свой~/.bashrc и, в том числе export JAVA_HOME="/home/aqeel/development/jdk/jdk1.6.0_35" сообщении

Я два jdks скачали (предположим, что второй был извлечен в / home/aqeel/разработка/jdk / jdk-10.0.1).

как мы можем динамически изменять JAVA_HOME на основе текущей используемой java?

мой решение не очень элегантное, я уверен, что есть лучшие варианты, но в любом случае:

  1. для динамического изменения JAVA_HOME на основе выбранной альтернативы java, я добавил этот фрагмент в ~/.bashrc следующее:

    export JAVA_HOME=$(update-alternatives --query java | grep Value: | awk -F'Value: ' '{print }' | awk -F'/bin/java' '{print }')
    

наконец (это выходит за рамки)если вам нужно постоянно менять версию java, вы можете рассмотреть:

  1. добавить псевдоним на ~./bash_aliases:

    alias change-java="sudo update-alternatives --config java"
    

(возможно, вам придется создать файл и, возможно, раскомментировать раздел, связанный с этим в ~/.bashrc и)


проще всего было бы либо удалить ссылку, либо отредактировать /usr/bin/java. это имеет вызов для выполнения java по указанному пути.