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

Я использую 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, она показывает стандартную (уже установленную open-jdk) версию Java. Как я могу переопределить 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 и он имеет установленный бит выполнения? Если не chmod a+x java Это.

Я надеюсь, что у вас есть sourceтвой .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, так далее.

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

Если вы хотите использовать JDK, скачанные с сайта 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. Это не устанавливает переменную JAVA_HOME, которую я хотел настроить, поэтому я просто добавил ее в свой ~/.bashrc, включая export JAVA_HOME="/home/aqeel/development/jdk/jdk1.6.0_35" заявление

Теперь у меня было загружено два JDK (скажем, второй был извлечен в /home/aqeel/development/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 $2}' | awk -F'/bin/java' '{print $1}')
    

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

  1. Добавление псевдонима к вашему ~./ Bash_aliases:

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

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

$JAVA_HOME/bin/java -version говорит: "Отказано в доступе"

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

Сделать

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

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

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

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

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

и проверьте с помощью: [который Java]

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

Попробуй это:

  • экспорт JAVA_HOME=put_here_your_java_home_path
  • введите экспорт PATH=$JAVA_HOME/bin:$PATH (убедитесь, что $JAVA_HOME является первым элементом в PATH)
  • попробуйте java -version

Причина: могут быть другие элементы PATH, указывающие на альтернативный дом java. Если вы поставите первым предпочитаемый JAVA_HOME, система будет использовать его.

Проверьте доступные версии Java в вашей системе Linux с помощью команды update-alternatives:

 $ sudo update-alternatives --display java

Теперь, когда есть подходящие кандидаты для изменения, вы можете переключить версию Java по умолчанию среди доступных JRE Java, выполнив следующую команду:

 $ sudo update-alternatives --config java

При появлении запроса выберите версию Java, которую вы хотите использовать.1, 2, 3 или т. Д.

Теперь вы можете проверить, что версия Java по умолчанию изменилась следующим образом.

 $ java -version

Есть простой способ, просто удалите символическую ссылку из "/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.sh.old, и теперь мой путь не переопределяется, и я могу вызвать java -version и увидеть Java 9 как ожидается. Хотя я правильно выбрал Java 9 в update-aternatives --config java этот файл jdk_home.sh продолжал переопределять $PATH при загрузке.

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

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