Gradle находит неправильный JAVA_HOME, хотя он правильно установлен
При попытке запустить gradle я получаю следующую ошибку:
# gradle
ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/default-java
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
Однако, когда я проверяю переменную JAVA_HOME, я получаю:
# echo $JAVA_HOME
/usr/lib/jvm/java-7-oracle
Мой JAVA_HOME определен в .bashrc, и я дважды проверил, что он установлен как источник.
Запуск java -version
также подтверждает, что JAVA_HOME установлен правильно и находится на PATH.
# java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
Я также проверил, что /usr/bin/java
символические ссылки на /etc/alternatives/java
, которые, в свою очередь, правильно символически ссылаются на /usr/lib/jvm/java-7-oracle/jre/bin/java
Кроме того, я проверил, что нет двух повторяющихся определений JAVA_HOME в .bash_profile
или /etc/profile
.
Итак, мой вопрос в том, как/почему Gradle найти /usr/lib/jvm/default-java
, и что еще более важно, как я могу указать его на правильный каталог?
Другие программы, требующие JDK, работают нормально, поэтому я думаю, что это проблема Gradle. Я также попытался переустановить Gradle, который не имел никакого значения.
Я запускаю 64-битный Xubuntu (база Ubuntu 13.10)
Ответы
Ответ 1
Оказывается, что конкретный двоичный файл Gradle, загруженный из репозитория Ubuntu 13.10, пытается экспортировать JAVA_HOME. Спасибо Lucas за это.
/usr/bin/gradle
строка 70:
export JAVA_HOME=/usr/lib/jvm/default-java
Комментируя эту строку, решает проблему, а Gradle находит правильный путь к двоичному файлу Java.
Если вы просто загрузите двоичный файл из своего сайта, у него нет этой проблемы,
Это проблема с версией репо Ubuntu. Также есть некоторые проблемы с версией 13.10.
Ответ 2
добавить символическую ссылку
sudo ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java
Ответ 3
Решение состоит в том, чтобы сделать JAVA_HOME == dir выше bin, где javac живет как в
type javac
javac is /usr/bin/javac # now check if its just a symlink
ls -la /usr/bin/javac
/usr/bin/javac -> /etc/alternatives/javac # its a symlink so check again
ls -la /etc/alternatives/javac # now check if its just a symlink
/etc/alternatives/javac -> /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
Хорошо, так, наконец, нашел корзину выше фактического Javac, так что сделайте это
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
Выше можно упростить и обобщить до
which javac >/dev/null 2>&1 || die "ERROR: no 'javac' command could be found in your PATH"
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac) )))
Ответ 4
Для меня эта ошибка вызвана причиной Gradle, установленной как sudo, и я пытался запускать как пользователь по умолчанию Gradle.
Try:
sudo gradle -version
или
sudo gradle -v
Ответ 5
Попробуйте установить последнюю версию gradle
,
sudo add-apt-repository ppa:cwchien/gradle
sudo apt-get update
sudo apt-get install gradle
Если мы установим из ubuntu repo, он установит старую версию (для меня это было gradle 1.4). В старой версии он устанавливает java home из gradle как export JAVA_HOME=/usr/lib/jvm/default-java
. У последней версии этой проблемы нет.
Ответ 6
Вы export
твой JAVA_HOME
? Без экспорта настройка не будет распространяться на команды, запущенные внутри этой оболочки. Кроме того, java -version
не использует JAVA_HOME
, а использует первый java
, найденный в вашем пути. Убедитесь, что ваш .bashrc
выглядит примерно так:
JAVA_HOME=/path/to/java/home
export JAVA_HOME
Ответ 7
У меня была та же проблема, но я не нашел команду export в строке 70 в файле gradle для последней версии 2.13, но я понимаю глупую ошибку там, которая следует за
Если вы не найдете строку 70 с командой export в файле gradle в папке gradle/bin/, тогда проверьте свой ~/.bashrc, если вы найдете export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java
, а затем удалите /bin/java
из эта строка, как JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64
, а она в пути → > вместо этого export PATH=$PATH:$HOME/bin:JAVA_HOME/
, будет export PATH=$PATH:$HOME/bin:JAVA_HOME/bin/java
. Затем запустите source ~/.bashrc
.
Причина в том, что если вы проверите свой файл gradle, вы найдете в строке 70 (если нет команды экспорта) или в строке 75,
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Это означает, что /bin/java
уже существует, поэтому его нужно вычесть из пути JAVA_HOME
.
Это произошло в моем случае.
Ответ 8
Мне пришлось столкнуться с этой проблемой, когда я запустил следующую команду в Ubuntu:
ionic build android
Чтобы решить эту проблему, я сделал следующие шаги:
ln -sf /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /usr/lib/jvm/default-java
Добавить JAVA_HOME в /etc/environment:
vi /etc/environment
Добавить
JAVA_HOME="/usr/lib/jvm/default-java"
После сохранения прочитайте:
source /etc/environment
Наконец, вы можете запустить команду сборки.
Ответ 9
Для меня была явная установка в разделе аргументов конфигурации внешних инструментов в Eclipse.
![enter image description here]()
Ответ 10
Вы также можете перейти в папку bin внутри папки установки gradle и исправить параметр JAVA_HOME в файле gradle.bat.
В моем случае мой JAVA_HOME был установлен в c:\Program files\java\bin
JAVA_HOME в gradle.bat был установлен в% JAVA_HOME%\bin\java.exe.
Я исправил JAVA_HOME в gradle.bat, и он сработал.
Спасибо!!!
Ответ 11
sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java
Создайте символическую ссылку на каталог по умолчанию-java.
Вы можете найти свой каталог java на
readlink -f $(which java)
# outputs: /usr/lib/jvm/java-7-oracle/jre/bin/java
# Remove the last `/bin/java` and use it in above symbolic link command.
Ответ 12
У меня тоже была проблема с этим. Он сказал неправильный каталог, когда он был прав. Поэтому я просто создал локальную переменную с именем JAVA_HOME, исключающим final/bin/java. Это сработало для меня.
Ответ 13
В моем dockercontainer (минимальная проблема не найти java) была, что "which" не был установлен. Компиляция проекта с использованием gradlew, который в. /gradlew для поиска java
Установка, которая решила проблему.
Ответ 14
Если ваша среда GRADLE_HOME и JAVA_HOME установлены правильно, проверьте каталог JDK и убедитесь, что у вас есть файл java.exe по указанному ниже пути.
C:\Program Files (x86)\Java\jdk1.8.0_181\bin
Как ошибка упоминается в файле gradle.bat
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
Он не может найти вашу установку Java. Так что найдите и установите
java.exe
в %JAVA_HOME%/bin
если все правильно.
Это работает для меня (моя учетная запись была отключена клиентом, и его администратор удалил java.exe из моей директории.)
Ответ 15
[Windows] Как уже говорилось, похоже, что .bat -file пытается найти java.exe из %JAVA_HOME%/bin/java.exe
поэтому он не находит его, так как bin
повторяется дважды в пути. Извлеките этот дополнительный /bin
из gradle.bat.
![Gradle]()
Ответ 16
Перед запуском команды попробуйте ввести:
export JAVA_HOME="path_to_java_home"
Где path_to_java_home
- это папка, в которой находится ваш bin/java
.
Если Java установлен правильно, вы можете найти его местоположение, используя команду:
readlink -f $(which java)
Не забудьте удалить bin/java
в конце пути, поместив его в JAVA_HOME
Ответ 17
В моем Ubuntu у меня 2 дня болит голова по этому вопросу.
Шаг 1. Введите в терминале, whereis java
тогда он будет отображать что-то вроде этого
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz
Шаг 2. /usr/lib/jvm/java-8-openjdk-amd64/bin/java
путь: /usr/lib/jvm/java-8-openjdk-amd64/bin/java
исключить bin/java
ваш JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64