Установите PATH и JAVA_HOME в Fedora 25

Пожалуйста, извините за вопрос, на который уже был дан ответ, но если я прочитаю 10 разных сообщений, я найду 20 разных ответов.

Я только что установил Fedora 25. Я собираюсь изучать разработку Java, и мне нужно настроить свою среду. Я буду использовать openjdk и установил java-1.8.0-openjdk-devel. Я также буду использовать Maven.

Теперь мне нужно установить переменные $PATH и $JAVA_HOME.

Я попробовал ответ, найденный здесь (Fedora OpenJDK Set JAVA_HOME)

но после добавления в мой .bashrc

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

а затем тестирование, я получаю то, что мне кажется неправильным ответом, потому что я не думаю, что в конце должен быть /jre/

> echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-1.b14.fc25.x86_64/jre/

Итак, могу ли я спросить, что мне следует установить для JAVA_HOME, чтобы мне не нужно было обновлять его при каждом обновлении openjdk?

После этого я думаю, что PATH просто

export PATH=$JAVA_HOME/bin:$PATH

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

PS также, является ли .bashrc правильным местом? потому что я вижу здесь (https://askubuntu.com/questions/175514/how-to-set-java-home-for-java), что /etc/environment будет более подходящим), спасибо


person Max Wen    schedule 01.02.2017    source источник
comment
Если вы установили openjdk из репозиториев Fedora, вам не нужно устанавливать эти переменные, все должно работать из коробки.   -  person WilQu    schedule 02.02.2017


Ответы (7)


Я предлагаю создать команду псевдонима, изменив bashrc и установив JAVA_HOME в bash_profile, это:

  1. Создайте команду в bashrc:

    alias set-java='sudo alternatives --config java;export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::");source  ~/.bash_profile'
    

Сохранить и выполнить: source ~/.bashrc

  1. Создайте общий JAVA_HOME в bash_profile:

    export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
    PATH=$JAVA_HOME/bin:$PATH
    
  2. Выполните команду псевдонима

person Eder Armando Anillo Lora    schedule 22.09.2017

Я поместил следующее в ~/.profile, а не в ~/.bashrc, и я думаю, что это то же самое в Fedora (я использовал CentOS на работе и делаю то же самое):

export JDK_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_HOME=$JDK_HOME/jre

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

В Ubuntu java изменился с 7 на 8 всего несколько лет назад. Я не знаю, почему Fedora захотела указать точный номер версии в папке java. Вы могли бы пожаловаться?

Если Java слишком много перемещается для вас в Fedora, используйте символическую ссылку. Символическая ссылка вступает в силу сразу же, без выхода из системы или перезагрузки. На своем ноутбуке я шифрую свою домашнюю папку, поэтому для дополнительной скорости я помещаю большинство сторонних инструментов в папку /tools/ и предоставляю себе доступ к ней (sudo chown -R myself.myself /tools/, где myself — мой идентификатор пользователя). Вот где я поставил свою установку maven. Tomcat использует другое имя каталога для каждого выпуска, поэтому я делаю символическую ссылку следующим образом:

cd /tools
ln -s apache-tomcat-8.0.38 latest-tomcat

Затем в ~/.profile (CATALINA означает TOMCAT в этом примере — не спрашивайте меня, почему):

# My un-encrypted Tools folder
export TOOLS=/tools
# Tomcat
export CATALINA_HOME=$TOOLS/latest-tomcat
# Maven
export M2_HOME=$TOOLS/apache-maven-3.3.9/
export M2="$M2_HOME"bin
export PATH=$PATH:$M2

Когда я обновляю tomcat:

cd /tools
rm -f latest-tomcat
ln -s apache-tomcat-8.0.39 latest-tomcat

Вы можете использовать ту же технику, чтобы сделать /usr/lib/jvm/latest-java. На самом деле, если вы устанавливаете Oracle Java (не обязательно рекомендуется), именно по этой причине он делает именно это.

Да, то, что вы сказали о пути, кажется мне правильным. Я не ставлю java на свой путь, предпочитая использовать $JDK_HOME, $JAVA_HOME или просто вызывать maven. Часть этого для безопасности. Отчасти это связано с тем, что я всегда знаю, какую версию Java использую.

P.S. Для меня синтаксис ln -s всегда выглядит так, как будто аргументы перевернуты. Сначала идет фактическое имя папки, за которым следует желаемый псевдоним/ссылка.

person GlenPeterson    schedule 01.02.2017

Установите JAVA_HOME:

echo "JAVA_HOME=/etc/alternatives/jre" >> ~/.profile
source ~/.profile
echo $JAVA_HOME
person Karima Rafes    schedule 06.09.2017
comment
Использование alternatives для управления версиями является настоятельно рекомендуемым методом, поэтому этот ответ должен быть предпочтительным, если только у вас нет особой причины не использовать alternatives. Ссылка /usr/bin/java в любом случае управляется alternatives, так что это просто более сложный способ сделать то, что делает этот ответ. - person theferrit32; 07.01.2020

OpenJDK в комплекте с Fedora у меня не работает. Например, IntelliJ не может использовать эту версию. На мой взгляд, лучший вариант - установить Oracle JDK RPM от Oracle.

Расположение JDK:

/usr/java/latest/

Для управления JRE используйте команду ниже:

sudo alternatives --config java
person MariuszS    schedule 12.09.2017

На данный момент это позволяет запускать Android Studio с использованием OpenJDK, предоставленного Fedora, и уважать материалы, предоставленные дистрибутивом, без множества неуправляемых символических ссылок:

vim ~/.bash_profile

Добавьте следующее или замените любые существующие примеры, похожие на него:

 export JAVA_HOME=$(readlink -f /usr/bin/java | cut -d/ -f1-6)

Команда в основном запрашивает физический путь, на который указывает символическая ссылка /usr/bin/java (настроенная альтернативами в Fedora), а затем говорит: «Возьмите первые 6 полей, предоставленных вам, разбив на символ /».

Обратите внимание, что ваш $PATH уже будет правильно настроен для использования с OpenJDK, предоставленным Fedora.

На практике это выглядит так:

 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-8.fc28.x86_64/jre

Это предполагает, что у вас есть хотя бы один из пакетов OpenJDK, поставляемых Fedora. 25, вероятно, отгрузили только 1.8, 28 — 1.8, 10.0.2 и 11.0.1. (если вы читаете это и все еще используете 25, возможно, пришло время обновиться.)

Установите один из доступных вам пакетов java-*-openjdk-headless (или один из предоставленных Oracle) и настройте, какой из них использовать, используя:

 sudo alternatives --config java

По умолчанию при установке Fedora 28 я использовал OpenJDK 1.8.

person Nick    schedule 30.11.2018

К сожалению, у меня нет доступной для меня Fedora, поэтому я не могу исследовать, как обычно устанавливается Java, но почему вы не пытаетесь заменить /usr/bin/java в своем выражении чем-то вроде /usr/bin/javac ? Фактический путь к ссылке javac, которую вы можете получить с помощью

which javac

И прочитайте реальный путь с помощью readlink. Очевидно, это работает, если установлен JDK (не JRE). Что касается обновления, большинство дистрибутивов Linux создают символическую ссылку, такую ​​как /usr/lib/jvm, которая указывает на правильный каталог и обновляется в случае новой версии. Для меня лучшим решением будет поместить этот путь в ваш bashrc.

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

person Georgy Klochkov    schedule 01.02.2017

Может быть, добавление tr может сработать? export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::" | tr -d "/jre/") ?

Кроме того, установка его в вашей env var сделает переменную независимой от используемой вами sh. Это отличный способ сохранить Его.

person Laurent-P    schedule 01.02.2017
comment
когда я пробую ваше выражение, затем открываю оболочку, это распечатывается до того, как будет предложено приглашение tr: если set1 не усекается, строка2 должна быть непустой - person Max Wen; 01.02.2017
comment
Я совершенно забыл об этом, я изменил команду, теперь она должна работать :) - person Laurent-P; 02.02.2017