【问题标题】:Gradle: Could not determine java version from '11.0.2'Gradle:无法从“11.0.2”确定 java 版本
【发布时间】:2019-06-18 20:45:54
【问题描述】:

我发表了以下评论:

./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/gradle-wrapper.properties 包含以下内容,包括distributionUrl=.../gradle-4.1-rc-1-all.zip

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

【问题讨论】:

  • 根据this bug report ,您的 gradle 包装器是否可能较旧?
  • 您运行命令 ./gradlew 启动与此特定项目关联的 gradle 版本。不保证项目的版本和你安装的一样(5.1.1)
  • 该版本信息是gradle --version./gradlew --version 的结果吗?基于 Gradle 的项目通常使用wrapper,以便不同的开发人员更容易使用相同的 Gradle 版本来构建项目;这也使构建更加稳定。
  • 这是gradle --version的版本
  • 你也可以去你的项目文件夹并打开文件:.../gradle/wrapper/gradle-wrapper.properties 吗?使用简单的文本编辑器打开它。里面的“distributionUrl”应该告诉我们包装器的版本是什么。

标签: java gradle gradlew


【解决方案1】:

您的系统中有两个不同的 Gradle 应用程序。

  1. 系统范围的 Gradle
    此应用程序由gradle (arguments) 调用。

  2. gradle-wrapper
    gradle-wrapper 特定于每个项目,只能在项目目录中调用,使用命令./gradlew (arguments)

您的系统级 gradle 版本是 5.1.1(正如 OP 在 cmets 中解释的那样,运行命令 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 并支持在 Java 11 上运行。如果这有效,那么您的 buildscript(文件 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 项目提供了一个指南(12),其中包含次要版本之间的重大更改和不推荐使用的功能,以便您可以逐步更新到最新版本。

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

[*] 作为correctly pointed out in the answer by @lupchiazoem,使用gradle wrapper --gradle-version=5.1.1(而不是./gradlew,因为我最初错误地在那里发布)。原因是 Gradle 在 Java 上运行。您可以使用任何可用的 Gradle 发行版更新您的 gradle-wrapper,无论是系统范围内安装的 Gradle 还是 gradle-wrapper 本身。但是,在这种情况下,您的包装器与您安装的 Java 版本不兼容,因此您必须使用系统范围的 Gradle(又名 gradle 而不是 ./gradlew)。

【讨论】:

  • @tryman 谢谢!对我来说,是你的更新 2 帮助了我。作为一般经验法则,我想我会检查即将发布的 gradle 版本。
  • 您没有准确说明错误的原因。不同的版本?
  • 什么?我认为更新 2 很清楚。她试图用 JDK11 运行 4.1RC1 版本的 Gradle 包装器。 Gradle 在 5.0 版本中增加了对 JDK11 的支持。那么@JoãoPimentelFerreira 你有什么困惑?这就是原因,剩下的就是如何将项目的包装器更新到支持 JDK11 的更高版本的解决方案。
  • 现在轮到我糊涂了。如果您的项目文件夹中确实有 gradle 包装器和系统范围的 Gradle 安装,那么上述分步解决方案应该适合您。您是否尝试通过在项目文件夹中执行更新命令gradle wrapper --gradle-version=5.0 来升级包装器?用你想要的版本替换 5.0,我想现在最新的是 5.4
  • 但是请注意:在您的包装器的 3.3 版和任何 5.x 版之间,您可能会或可能不会遇到一些重大更改。这就是为什么在我的回答中,我指出您首先使用系统范围的 Gradle 构建您的项目,以在更新项目的包装器之前验证您想要升级到的 5.x 版本是否能顺利运行。如果赶时间(我感觉到你语气中的紧迫感),您可以随时直接使用系统 gradle 或降级到较旧的 JDK,然后再升级您的包装器。
【解决方案2】:

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

gradle wrapper --gradle-version 5.1.1

注意:使用gradle 而不是gradlew

【讨论】:

  • 或者只是用JDK12替换gradle/wrapper/gradle-wrapper.propertiesdistributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip版本6中的版本似乎不起作用。 5.1.1 运行良好,谢谢。
【解决方案3】:

使用以下版本更新 gradle/wrapper/gradle-wrapper.properties 为我修复了它:

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

【讨论】:

    【解决方案4】:

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

    $ export JAVA_HOME=

    【讨论】:

    • 这也解决了我的问题。 jenv 最初可能已经开始了我的问题。
    • 对我来说 GRADLE_HOME 已更新(到 5.4.1``)但不是 gradle 版本(仍然指向旧版本 4.3),这很奇怪,但重新启动终端工作正常。 source ~/.bash_profile 有点奇怪
    【解决方案5】:

    tl;dr:通过运行update-alternatives降级java


    我的系统 gradle 版本是 4.4.1,而 gradle wrapper 版本是 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】:

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

      sdk use java 8.0.222.j9-adpt
      

      之后,应用程序在此处按预期运行。

      【讨论】:

        【解决方案7】:

        因为你的包装器版本不支持 11+ 你可以make simple trick to cheat newer version of InteliJ forever.

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

        或者,如果您想使用 java 11+,您只需将包装器版本更新到 4.8+

        【讨论】:

        • 请注意不要在 Android Studio 上尝试此解决方案。我会打破它。
        【解决方案8】:

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

        This link 提供了如何安装 gradle 5.0 的详细步骤

        【讨论】:

          【解决方案9】:

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

          gradle wrapper --gradle-version=5.1.1
          

          【讨论】:

            【解决方案10】:

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

            我已经更新了我的gradlew,如下所述:https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:upgrading_wrapper

            TLTD:

            ./gradlew wrapper --gradle-version 5.6.2
            

            【讨论】:

              【解决方案11】:

              我在使用 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
              

              【讨论】:

                【解决方案12】:

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

                解决方案:

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

                【讨论】:

                • 这是唯一一个在当前 Windows 10 上对我来说很好的解决方案。Sdkman as proposed here 也应该可以解决问题,但在 Windows 下有点棘手。
                【解决方案13】:

                就我而言,我试图为一个旧的 Unity 3D 项目构建并获取 APK(以便我可以在我的 Android 手机上玩游戏)。我使用的是最新的 Android Studio 版本,以及我可以通过 Android Studio 中的 SDK Manager 下载的所有 SDK 包。 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,as told here。我的建议是:

                1. Uninstall unwanted JDK 如果您已经安装了一个。
                2. Head here
                3. 如果尚未登录,请登录/打开一个 Oracle 帐户。
                4. 为您的计算机设置(32 位/64 位、Windows/Linux 等)下载较旧但功能强大的 JDK 8
                5. Install the JDK。记住安装路径。
                6. 如果您使用的是 Windows,请打开环境变量并通过右键单击 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"] 更改 Java 路径
                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. 如果需要,请重新启动计算机以使更改生效。

                【讨论】:

                • 我在我的系统上使用旧版本的 Gradle (4.1) 并尝试使用 Java 11。我猜 Gradle 4.1 不支持 Java 版本。所以我刚刚用brew upgrade gradle 更新了Gradle,它安装了最新的(7.0)版本的Gradle。生活又美好了。
                【解决方案14】:

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

                【讨论】:

                  【解决方案15】:

                  执行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
                  

                  【讨论】:

                    【解决方案16】:

                    如果您使用的是 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

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

                    【讨论】:

                      【解决方案17】:

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

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

                        然后重建。

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

                      【讨论】:

                        【解决方案18】:

                        当我尝试使用JDL 11.0.7 安装Gradle-2.4 时,我在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
                        
                        

                        【讨论】:

                          【解决方案19】:

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

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

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

                          【讨论】:

                            【解决方案20】:

                            您可能错过了安装 maven 请安装 maven 然后请检查。它会在......之后工作。

                            【讨论】:

                            • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                            【解决方案21】:

                            正如其他人所提到的,Gradle 5 中添加了 Java 11 支持。解决方案是升级您的 Gradle 包装器:

                            1. 去这里了解 Gradle 的最新版本:https://gradle.org/releases/

                            2. 升级 Gradle 包装器

                              • 如果您的机器上安装了 Gradle:

                                gradle wrapper --gradle-version 7.2
                                
                              • 如果您没有安装 Gradle:

                                1. 修改 gradle/wrapper/gradle-wrapper.properties

                                  用最新版本的 Gradle 更新 distributionUrl,例如

                                  distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
                                  
                                2. 升级剩余的包装文件(gradle-wrapper.jar、gradlew、gradlew.bat)

                                  ./gradlew wrapper --gradle-version 7.2
                                  

                            由于您是从旧版本的 Gradle 升级,您可能会收到如下错误:

                            Could not find method compile() for arguments ...
                            Could not find method testCompile() for arguments ...
                            

                            要解决这些问题,请编辑 build.gradle 并将 compile 的每个实例替换为 implementation 并将 testCompile 替换为 testImplementation

                            【讨论】:

                              【解决方案22】:

                              我在 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 中得到修复。

                              【讨论】:

                                【解决方案23】:

                                进入项目文件.. gradle/wrapper/gradlewrapper.properties

                                您可以在此处将distributionurl 的值更改为最新版本。 (发现于docs.gradle.org

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2023-04-06
                                  • 2018-12-15
                                  • 2018-04-04
                                  • 2021-02-28
                                  • 2021-12-31
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多