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, она показывает версию java-версии по умолчанию (уже установленную open-jdk). Как я могу переопределить открытый open-jdk по умолчанию с тем, который я загрузил?
UPDATE:
which java
говорит /usr/bin/java
$JAVA_HOME/bin/java -version
говорит, что "Permission Denied"
sudo $JAVA_HOME/bin/java -version
(запрашивает пароль, затем) говорит, что команда не найдена
но cd $JAVA_HOME/bin
, а ls
показывает, что это правильный каталог.
Ответы
Ответ 1
Несмотря на то, что настройки выглядят правильно, необходимо проверить несколько вещей:
- Вывод
env
- конкретно PATH
. -
command -v java
говорит вам, что? - Есть ли исполняемый файл
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. Другие оболочки могут нуждаться в аналогичной команде.
Ура,
Ответ 2
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.
Ответ 3
$JAVA_HOME/bin/java -version говорит "Разрешить отказ"
Если вы не можете получить доступ или запустить код, это будет игнорироваться при добавлении к вашему пути. Вы должны сделать его доступным и выполнимым или получить собственную копию.
Сделайте
ls -ld $JAVA_HOME $JAVA_HOME/bin $JAVA_HOME/bin/java
чтобы узнать, почему вы не можете получить доступ или запустить эту программу,
Ответ 4
Когда он ищет java, он смотрит слева направо в записи пути, которые разделены: поэтому вам нужно добавить путь к последней директории jdk/bin до /usr/bin, поэтому при ее поиске она найдет последний и продолжить поиск дальше.
то есть. PATH =/usr/java/jdk_1.8/bin:/usr/bin:..... и т.д.
затем инициализируйте профиль пользователя с помощью команды: source ~/.bash_profile
и проверьте с помощью: [which java]
вы получите правильный вариант.
Ответ 5
Если вы хотите использовать JDK, загруженные с сайта Oracle, то, что сработало для меня (используя Mint), использует альтернативные варианты обновлений:
- Я загрузил JDK и извлек его в любом месте, например, в /home/aqeel/development/jdk/jdk1.6.0_35
-
Я побежал:
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.
- Это не устанавливает переменную 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?
Мое решение не очень элегантное, я уверен, что там есть лучшие варианты, но в любом случае:
-
Чтобы динамически изменять 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, вы можете подумать:
-
Добавление псевдонима к вашим ~./Bash_aliases:
alias change-java="sudo update-alternatives --config java"
(Возможно, вам придется создать файл и, возможно, раскомментировать раздел, связанный с этим в ~/.bashrc)
Ответ 6
Существует простой способ, просто удалите символическую ссылку из "/usr/bin". Он будет работать.
Ответ 7
Обновление ~/.profile
или ~/.bash_profile
иногда не работает. Я просто удалил JDK 6 и source
d .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
Ответ 8
В 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 при загрузке.
Ответ 9
проверьте доступные версии Java в вашей системе Linux с помощью команды update-alternatives:
$ sudo update-alternatives --display java
Теперь, когда есть подходящие кандидаты на изменение, вы можете переключить версию Java по умолчанию среди доступных JRE Java, выполнив следующую команду:
$ sudo update-alternatives --config java
При появлении запроса выберите версию Java, которую вы хотите использовать. 1, 2, 3 или т.д.
Теперь вы можете проверить, что версия Java по умолчанию изменилась следующим образом.
$ java -version
Ответ 10
Попробуй это:
- экспортировать JAVA_HOME = put_here_your_java_home_path
- тип экспорта PATH = $ JAVA_HOME/bin: $ PATH (убедитесь, что $ JAVA_HOME является первым элементом в PATH)
- попробуй java -version
Причина: могут быть другие элементы PATH, указывающие на альтернативный дом Java. Если вы поместите сначала предпочитаемый JAVA_HOME, система будет использовать этот.
Ответ 11
Проще всего было бы либо удалить ссылку, либо отредактировать /usr/bin/java. это вызов для выполнения java по указанному пути.