Gradle: не удалось определить версию Java от '11 .0.2 '

134

Я написал следующий комментарий:

./gradlew app:installDebug

только встретиться с журналом:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.2'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

Моя версия gradle - 5.1.1:

------------------------------------------------------------
Gradle 5.1.1
------------------------------------------------------------

Build time:   2019-01-10 23:05:02 UTC
Revision:     3c9abb645fb83932c44e8610642393ad62116807

Kotlin DSL:   1.1.1
Kotlin:       1.3.11
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          11.0.2 (Oracle Corporation 11.0.2+9-LTS)
OS:           Mac OS X 10.13.6 x86_64

Я не знаю, что делать дальше (я пробовал перейти на более раннюю версию, но пока ничего не помогло).

ОБНОВЛЕНИЕ: Когда я побежал ./gradlew --version, то получил следующее:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.2'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

Мой gradle-wrapper.propertiesсодержит:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip
lesley2958
источник
5
согласно этому отчету об ошибке , возможно ли, что ваша оболочка Gradle старше?
Родди из Frozen Peas
моя версия gradle - 5.1.1, что, я думаю, должно быть в порядке.
lesley2958
2
Вы запускаете команду ./gradlew, которая запускает версию gradle, связанную с этим конкретным проектом. Нет гарантии, что версия проекта такая же, как та, которую вы установили (5.1.1)
tryman
1
Эта информация о версии является результатом gradle --versionили ./gradlew --version? В проектах на основе Gradle часто используется оболочка, чтобы разным разработчикам было проще использовать одну и ту же версию Gradle для сборки проекта; это также делает сборки более стабильными.
Слоу
это версияgradle --version
lesley2958

Ответы:

124

В вашей системе есть два разных приложения Gradle.

  1. общесистемный Gradle
    Это приложение вызывается gradle (arguments).

  2. Gradle-обертка
    The Gradle-обертка специфичен для каждого проекта и может быть использован только в директории проекта, используя команду ./gradlew (arguments).

Ваша общесистемная версия gradle - 5.1.1 (как OP объяснил в комментариях, выполнение команды gradle --versionвернуло версию 5.1.1).

Однако сбой является результатом вызова gradle-wrapper ( ./gradlew). Не могли бы вы проверить версию оболочки Gradle вашего проекта? Для этого выполните ./gradlew --versionв папке вашего проекта, в каталоге, где находятся файлы gradlew и gradlew.bat.

Обновление
1.Поскольку запуск завершился ./gradlew --versionнеудачно, вы можете вручную проверить версию своей оболочки, открыв файл:

(корневая папка проекта) /gradle/wrapper/gradle-wrapper.properties

с помощью простого текстового редактора. «DistributionUrl» внутри должен сообщить нам, какая версия оболочки.

Обновление 2: согласно обновленному вопросу OP версия gradle-wrapper - 4.1RC1.
Gradle добавил поддержку JDK 11 в Gradle 5.0 . Следовательно, поскольку 4.1RC не поддерживает JDK 11, это определенно проблема.

Очевидный способ - обновить gradle-wrapper вашего проекта до версии 5.0. Однако перед обновлением попробуйте запустить gradle app:installDebug. Это будет использовать ваш установленный в системе Gradle версии 5.1.1 и поддерживающий Java 11. Посмотрите, работает ли это. Если это так, то на ваш скрипт сборки (файл build.gradle) не повлияют какие-либо критические изменения между v.4.1RC1 и v.5.1.1, и вы можете затем обновить свою оболочку, выполнив из командной строки внутри папки вашего проекта: gradle wrapper --gradle-version=5.1.1[ *].

Если gradle app:installDebugне удается выполнить правильно, возможно, вам нужно обновить скрипт сборки Gradle. Для обновления с v.4.1RC1 до 5.1.1 проект Gradle предоставляет руководство ( 1 , 2 ) с критическими изменениями и устаревшими функциями между второстепенными выпусками, так что вы можете постепенно обновляться до последней версии.

В качестве альтернативы, если по какой-то причине вы не можете или не хотите обновлять скрипт сборки Gradle, вы всегда можете понизить версию Java до той, которую поддерживает Gradle 4.1RC1.

[*] Как правильно указано в другом ответе @lupchiazoem, используйте gradle wrapper --gradle-version=5.1.1(а не так, ./gradlewкак я изначально отправил туда по ошибке). Причина в том, что Gradle работает на Java. Вы можете обновить свою gradle-wrapper, используя любой рабочий дистрибутив Gradle, будь то Gradle, установленный в вашей системе, или сам gradle-wrapper. Однако в этом случае ваша оболочка несовместима с вашей установленной версией Java, поэтому вам нужно использовать общесистемный Gradle (он же gradleи нет ./gradlew).

tryman
источник
1
@tryman спасибо! мне помогло именно ваше обновление 2. Как правило, я думаю, что проверю версию Gradle.
Avid Programmer
вы не указываете, в чем именно ПРИЧИНА ошибки. Разные версии?
Жуан Пиментел Феррейра
Какой? Я думал, что Обновление 2 было довольно ясным. Она пыталась запустить оболочку Gradle версии 4.1RC1 с JDK11. Gradle добавил поддержку JDK11 в версии 5.0. Так в чем же ты запуталась, @ JoãoPimentelFerreira? Это было причиной, остальное - решение того, как обновить оболочку проекта до более поздней версии, которая поддерживает JDK11.
tryman
1
Теперь моя очередь запутаться. Если у вас действительно есть как оболочка gradle в папке вашего проекта, так и общесистемная установка Gradle, приведенное выше пошаговое решение должно сработать для вас. Вы пытались обновить оболочку, выполнив в папке проекта команду обновления gradle wrapper --gradle-version=5.0? Замените 5.0 желаемой версией, я думаю, теперь последняя версия 5.4
tryman
1
Однако одно предостережение: между версией 3.3 вашей оболочки и любой версией 5.x обязательно будут некоторые критические изменения, с которыми вы можете или не можете столкнуться. Вот почему в моем ответе я предлагаю вам сначала создать свой проект с помощью общесистемного Gradle, чтобы убедиться, что все работает гладко с версией 5.x, которую вы хотите обновить, перед обновлением оболочки вашего проекта. Если вы спешите (я чувствую срочность в вашем тоне), вы всегда можете использовать системный градиент напрямую или перейти на более старую версию JDK и позже обновить вашу оболочку.
tryman
34

Поскольку distributionUrlвсе еще указывается на более старую версию, обновите оболочку, используя:

gradle wrapper --gradle-version 5.1.1

Примечание: используйте, gradleа неgradlew

lupchiazoem
источник
Это работает. Команда обновляет мою версию оболочки Gradle. Спасибо.
Daniel
Или просто заменить версию в gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip версии 6 на JDK12, похоже, не работает. 5.1.1 работает нормально, спасибо.
Лиам Керниган
11

В моем случае для JAVA_HOMEпеременной было установлено значение /usr/lib/jvm/jdk-11.0.2/. Достаточно было отключить переменную следующим образом:

$ export JAVA_HOME=

dr0i
источник
1
Это тоже решило мою проблему. jenv, возможно, изначально запустил мои проблемы.
jokarl
для меня GRADLE_HOMEбыл обновлен (до 5.4.1 ''), но не версия gradle (все еще указывающая на более старую версию 4.3), что странно, но перезапуск терминала работал нормально. что-то странное сsource ~/.bash_profile
прайагупд
7

Обновление gradle/wrapper/gradle-wrapper.propertiesдо следующей версии исправило это для меня:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Мануэль Шмитцбергер
источник
6

tl; dr : перейти на более раннюю версию Java, запустивupdate-alternatives


Моя системная версия Gradle была 4.4.1, а версия оболочки Gradle была 4.0. После выполнения команды, заданной несколькими другими ответами:

gradle wrapper --gradle-version 4.4.1

У меня все еще была та же ошибка:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.4'.

Оказывается, java 11 не поддерживался до версии Gradle 4.8, а в моих репозиториях программного обеспечения была только версия 4.4.1. (Кроме того, обновление до более новой версии Gradle могло быть несовместимо с пакетом, который я пытался скомпилировать.)

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

sudo update-alternatives --config java
craq
источник
5

Поскольку версия оболочки не поддерживает 11+, вы можете использовать простой трюк, чтобы навсегда обмануть новую версию InteliJ.

  press3x Shift -> type "Switch Boot JDK" -> and change for java 8. 

https://blog.jetbrains.com/idea/2015/05/intellij-idea-14-1-4-eap-141-1192-is-available/

Или, если вы хотите работать с java 11+, вам просто нужно обновить версию оболочки до 4.8+

SuperAndrew
источник
1
Внимание! НЕ пробуйте это решение на Android Studio. Я сломаю это.
Маурисио Сартори
3

Чтобы короче длинный ответ, обновите свой gradlewсистемный gradleинструмент. Обратите внимание, что приведенное ниже обновление работает, даже если gradleверсия вашей системы < 5.

gradle wrapper --gradle-version=5.1.1
Рокки Инд
источник
3

У меня здесь была такая же проблема. В моем случае мне нужно использовать старую версию JDK, и я использую sdkmanager для управления версиями JDK, поэтому я изменил версию виртуальной машины на 1.8.

sdk use java 8.0.222.j9-adpt

После этого приложение здесь работает как положено.

Масиэль Бомбонато
источник
2

У меня была аналогичная проблема: по умолчанию gradle wrapperбыла версия 4.x, в то время как поддержка более высоких версий Java была добавлена ​​в Gradle 5.

Я обновил свой, gradlewкак описано здесь: https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:upgrading_wrapper

TLTD:

./gradlew wrapper --gradle-version 5.6.2
Нестор Миляев
источник
1

Я решил это, щелкнув Файл -> Структура проекта, затем изменил расположение JDK на использование встроенного JDK (рекомендуется)

Деррик Лэмпти
источник
0

Я столкнулся с подобной проблемой. Я удалил эти:

  • библиотеки и кеши из папки .idea (YourApp> .idea> ..) И
  • содержимое папки сборки.

    затем перестройте.

* НЕ ЗАБУДЬТЕ СНАЧАЛА РЕЗЕРВИРОВАТЬ СВОЙ ПРОЕКТ *

KHAN
источник
0

Я столкнулся с той же проблемой в Ubuntu 18.04.3 LTS. В моем случае apt установил версию Gradle 4.4.1. Уже установленная версия Java была 11.0.4.

Сообщение сборки, которое я получил, было

Could not determine java version from '11.0.4'.

В то время большинство онлайн-документов ссылались на версию Gradle 5.6, поэтому я сделал следующее:

sudo add-apt-repository ppa:cwchien/gradle
sudo apt update
sudo apt upgrade gradle

Затем я повторил инициализацию проекта (используя "gradle init" со значениями по умолчанию). После этого "./gradlew build" работала корректно.

Позже я прочитал комментарий об изменении формата вывода из "java --version", которое привело к сбою gradle, что было исправлено в более поздней версии gradle.

MgFrobozz
источник
0

В моем случае я пытался собрать и получить APK для старого проекта Unity 3D (чтобы я мог играть в игру на своем телефоне Android). Я использовал самую последнюю версию Android Studio и все пакеты SDK, которые я мог загрузить через SDK Manager в Android Studio. Пакеты SDK находились в

C:/Users/Onat/AppData/Local/Android/Sdk 

И сообщение об ошибке, которое я получил, было таким же, за исключением версии JDK (Java Development Kit) «jdk-12.0.2». JDK находился в

C:\Program Files\Java\jdk-12.0.2

И переменная среды в Windows была JAVA_HOME: C: \ Program Files \ Java \ jdk-12.0.2

После 3 часов исследования я обнаружил, что Unity не поддерживает JDK 10. Как сказано в https://forum.unity.com/threads/gradle-build-failed-error-could-not-determine-java-version-from-10-0-1.532169/. Мое предложение:

  1. Удалите ненужный JDK, если он у вас уже установлен. https://www.java.com/tr/download/help/uninstall_java.xml
  2. Направляйтесь к http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  3. Войдите в / откройте учетную запись Oracle, если еще не вошли в систему.
  4. Загрузите более старую, но работоспособную JDK 8 для настройки вашего компьютера (32-разрядная / 64-разрядная версия, Windows / Linux и т. Д.)
  5. Установите JDK. Запомните путь установки. ( https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/ )
  6. Если вы используете Windows, откройте переменные среды и измените путь к Java, щелкнув правой кнопкой мыши My Computer/This PC>Properties>Advanced System Settings>Environment Variables>New>Variable Name: JAVA_HOME>Variable Value: [YOUR JDK Path, Mine was "C:\Program Files\Java\jdk1.8.0_221"]
  7. В Unity 3D нажмите Edit > Preferences > External Tools and fill in the JDK path (Mine was "C:\Program Files\Java\jdk1.8.0_221").
  8. Кроме того, в том же всплывающем окне отредактируйте путь к SDK. (Получите это от Android Studio > SDK Manager > Android SDK > Android SDK Location.)
  9. При необходимости перезагрузите компьютер, чтобы изменения вступили в силу.
Онат Коручу
источник
0

попал в файл проекта .. gradle / wrapper / gradlewrapper.properties

там вы можете изменить значение distributionurlна самую последнюю версию. (Найдено на docs.gradle.org)

atreyHazelHispanic
источник
0

Я столкнулся с той же проблемой при установке Docker, когда пытался установить Gradle-2.4с помощью JDL 11.0.7. Мне нужно установить более позднюю версию, чтобы решить эту проблему.

Вот рабочий Dockerfile

FROM openjdk:11.0.7-jdk
RUN apt-get update && apt-get install -y unzip
WORKDIR /gradle
RUN curl -L https://services.gradle.org/distributions/gradle-6.5.1-bin.zip -o gradle-6.5.1-bin.zip
RUN unzip gradle-6.5.1-bin.zip
ENV GRADLE_HOME=/gradle/gradle-6.5.1
ENV PATH=$PATH:$GRADLE_HOME/bin
RUN gradle --version
Adiii
источник