it-swarm.com.ru

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 показывают, что это правильный каталог.

40
user517491

Несмотря на то, что настройки выглядят правильно, необходимо проверить несколько вещей:

  1. Вывод env - в частности, PATH.
  2. command -v 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.

Наконец, вам может потребоваться запустить hash -r, чтобы очистить кэш программы Bash. Другие оболочки могут нуждаться в аналогичной команде.

Ура,

59
Anders R. Bystrup

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 .

$ Java_HOME/bin/Java -version говорит: «Отказано в доступе»

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

Сделать 

ls -ld $Java_HOME $Java_HOME/bin $Java_HOME/bin/Java

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

4
Peter Lawrey

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

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

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

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

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

3
SandeepGodara

Если вы хотите использовать JDK, скачанные с сайта Oracle , то, что мне помогло (используя Mint), это использоватьupdate-alternatives:

  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. Добавление alias к вашему ~./Bash_aliases:

    alias change-Java="Sudo update-alternatives --config Java"
    

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

2
Gerardo Roza

Обновление ~/.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
0
javaProgrammer

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

0
Bineeth

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

0
JesseBoyd

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

 $ Sudo update-alternatives --display Java

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

 $ Sudo update-alternatives --config Java

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

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

 $ Java -version
0
shabinjo