Gradle:无法从“ 11.0.2”确定Java版本

时间:2019-01-25 02:17:18

标签: java gradle gradlew

我发表了以下评论:

./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

21 个答案:

答案 0 :(得分:40)

您的系统中有两个不同的Gradle应用程序。
1)系统范围的Gradle
gradle (arguments)调用此应用程序。
2)渐变包装
gradle-wrapper特定于每个项目,并且只能使用命令./gradlew (arguments)在项目目录内调用。

您的系统范围内的gradle版本为5.1.1(如注释中所述的OP,运行命令gradle --version返回的版本是5.1.1)。

但是,失败是由于调用gradle-wrapper(./gradlew)导致的。您可以检查项目的Gradle包装器版本吗?为此,请在项目文件夹中gradlew和gradlew.bat文件所在的目录中执行./gradlew --version

更新1:
如果./gradlew --version运行失败,您可以通过打开以下文件来手动检查包装器的版本:

  

(项目的根文件夹)/gradle/wrapper/gradle-wrapper.properties

使用简单的文本编辑器。内部的“ distributionUrl”应该告诉我们包装器的版本。

更新2: 根据OP的更新问题,gradle-wrapper的版本为4.1RC1。
摇篮added support for JDK 11 in Gradle 5.0。因此,由于4.1RC不支持JDK 11,因此这肯定是一个问题。

最明显的方法是将项目的gradle-wrapper更新到5.0版。但是,在更新之前,请尝试运行gradle app:installDebug。这将使用系统范围内已安装的Gradle,其版本为5.1.1并支持Java11。请查看是否可行。如果是这样,则您的buildscript(文件build.gradle)不受v.4.1RC1和v.5.1.1之间的任何重大更改的影响,然后可以通过从项目文件夹中的命令行执行来更新包装器:{ {1}} [*]。

如果gradle wrapper --gradle-version=5.1.1无法正确执行,则可能需要升级Gradle构建脚本。为了从v.4.1RC1更新到5.1.1,Gradle项目提供了一个指南(12),其中包含次要版本之间的重大更改和不推荐使用的功能,因此您可以逐步更新到最新版本版。

或者,如果由于某种原因您不能或不想升级Gradle构建脚本,则始终可以选择将Java版本降级到Gradle 4.1RC1支持的版本。

[*]正如@lupchiazoem在另一个答案中正确指出的那样,请使用gradle app:installDebug(而不是gradle wrapper --gradle-version=5.1.1,因为我最初在这里错误地发帖了)。原因是Gradle在Java上运行。您可以使用任何有效的Gradle发行版(系统范围内安装的Gradle或gradle-wrapper本身)更新gradle-wrapper。但是,在这种情况下,您的包装程序与您安装的Java版本不兼容,因此您必须使用系统范围的Gradle(又名./gradlew而不是gradle)。

答案 1 :(得分:10)

由于distributionUrl仍指向较旧的版本,请使用以下方法升级包装器:

gradle wrapper --gradle-version 5.1.1

注意:使用gradle而不是gradlew

答案 2 :(得分:10)

使用以下版本更新gradle/wrapper/gradle-wrapper.properties可以为我修复此问题:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

答案 3 :(得分:2)

我在使用 redhat java-11 版本的 Windows 中遇到了类似的问题,编辑了 gradle-wrapper.properties 并使用 gradle-6.5.1-bin.zip 更新了 distributionUrl,如下所示 它对我有用。

distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip

答案 4 :(得分:1)

如果您使用的是 android studio 4.2.2 版,它会以默认的 Java 11.0.8 启动

检查您的版本Android Studio -> About Android Studio

将 11.0.8 更改为 JDK 8

1- 安装 JDK8

2- 安装 Choose Runtime plugin

3- 打开操作选项卡:Command + Shift + A ⇧⌘A

actiontab

4- 选择运行时并在列表中选择 jdk 8

selectjdk

祝你好运!

答案 5 :(得分:1)

tl; dr :通过运行update-alternatives

降级Java

我的系统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'.

事实证明,直到gradle 4.8才支持Java 11,而我的软件存储库中只有4.4.1。 (此外,升级到较新的gradle版本可能与我尝试编译的软件包不兼容。)

答案是降级Java。我的系统实际上已经安装了java8,通过运行此命令并按照说明进行操作,很容易在java版本之间进行切换:

sudo update-alternatives --config java

答案 6 :(得分:1)

要简短回答,请使用系统gradlew工具升级gradle。请注意,即使您的系统gradle的版本为< 5,也可以进行以下升级。

gradle wrapper --gradle-version=5.1.1

答案 7 :(得分:1)

我遇到了同样的问题。升级到gradle 5.0对我有用。

此链接提供有关如何安装gradle 5.0的详细步骤: https://linuxize.com/post/how-to-install-gradle-on-ubuntu-18-04/

答案 8 :(得分:1)

在我的情况下,JAVA_HOME变量设置为/usr/lib/jvm/jdk-11.0.2/。像这样取消设置变量就足够了:

$ export JAVA_HOME=

答案 9 :(得分: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构建”正常工作。

我后来阅读了有关“ java --version”输出格式更改的评论,该更改导致gradle中断,该问题已在gradle的更高版本中修复。

答案 10 :(得分:0)

就我而言,我试图为旧的Unity 3D项目构建并获取APK(以便可以在Android手机上玩游戏)。我使用的是最新版本的Android Studio,并且可以通过Android Studio中的SDK Manager下载所有SDK包。 SDK软件包位于

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

除了JDK(Java开发工具包)版本“ 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不支持JDK10。如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. 下载适用于您的计算机设置(32位/ 64位,Windows / Linux等)的较旧但功能良好的JDK 8
  5. 安装JDK。记住安装路径。 (https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/
  6. 如果您使用的是Windows,请打开环境变量并通过右键单击我的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. 更改Java路径。
  8. 在Unity 3D中,按Edit > Preferences > External Tools and fill in the JDK path (Mine was "C:\Program Files\Java\jdk1.8.0_221")
  9. 此外,在同一弹出窗口中,编辑SDK路径。 (从Android Studio > SDK Manager > Android SDK > Android SDK Location获取。)
  10. 如果需要,请重新启动计算机以使更改生效。

答案 11 :(得分:0)

我遇到了类似的问题:我的默认gradle wrapper是4.x版,而Gradle 5中已添加了对更高版本Java的支持。

我已经按照以下说明更新了gradlewhttps://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:upgrading_wrapper

TLTD:

./gradlew wrapper --gradle-version 5.6.2

答案 12 :(得分:0)

我通过单击文件->项目结构来解决此问题,然后将JDK位置更改为使用嵌入式JDK(推荐)

答案 13 :(得分:0)

获取到项目文件。 gradle / wrapper / gradlewrapper.properties

您可以将distributionurl的值更改为最新版本。 (位于docs.gradle.org上)

答案 14 :(得分:0)

我在这里遇到了同样的问题。 就我而言,我需要使用旧版本的JDK,并且正在使用sdkmanager来管理JDK的版本,因此,我将虚拟机的版本更改为1.8。

sdk use java 8.0.222.j9-adpt

此后,该应用程序将按预期运行。

答案 15 :(得分:0)

由于包装器版本不支持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+

答案 16 :(得分:0)

我遇到了类似的问题。我删除了这些:

  • .idea文件夹(YourApp> .idea> ..)中的库和缓存,并且
  • 构建文件夹的内容。

    然后重建。

*不要忘记备份您的项目*

答案 17 :(得分:0)

在尝试将Gradle-2.4JDL 11.0.7一起安装时,我在Docker设置中遇到了相同的问题。我必须安装later version来解决此问题。

这是工作中的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

答案 18 :(得分:0)

进行cordova build android --release时出现此错误

尝试了许多不同的事情之后,我能够通过简单地解决此问题:

npm install cordova -g   # to upgrade to version 10.0.0

cordova platform rm android
cordova platform add android    # to upgrade to android version 9.0.0

答案 19 :(得分:0)

对于快速而肮脏的测试来说,最简单的方法是使用覆盖,例如:

> JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/ ./gradlew build

由于包装器会检查 JAVA_HOME,因此您可以在每次运行时选择任何您想要的。

答案 20 :(得分:0)

我在 Windows 中遇到了同样的问题。我的gradle配置是设置使用JDK1.8,但JAVA_HOME配置为使用其他JDK。

解决方案:

根据你在gradle中配置的JDK正确设置JAVA_HOME

enter image description here