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 ответов
Несмотря на то, что настройки выглядят правильно, необходимо проверить несколько вещей:
- Выход из
env
- конкретноPATH
, which 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.
Ура,
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) работает альтернатива обновления:
- Я скачал 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)
$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 и 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
В 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 по указанному пути.