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