Gradle:无法确定java版本从'11.0.2'

我发表了以下评论:

./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
318451 次浏览

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

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

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

您的系统级gradle版本是5.1.1(正如注释中解释的OP,运行命令gradle --version返回版本5.1.1)。

然而,失败是调用gradle-wrapper (./gradlew)的结果。你能检查你的项目的gradle包装版本吗?要做到这一点,在项目的文件夹中执行./gradlew --version,在gradlew和gradlew.bat文件所在的目录中。

< p > 更新1:
当运行./gradlew --version失败时,你可以通过打开文件手动检查包装器的版本:

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

一个简单的文本编辑器。“distributionUrl"Inside应该告诉我们包装器的版本是什么。

< >强更新2: 根据OP更新的问题,gradle-wrapper的版本是4.1 rc1
Gradle 在Gradle 5.0中增加了对JDK 11的支持。因此,由于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支持运行的版本。

[*]作为@lupchiazoem的回答正确地指出了这一点,使用gradle wrapper --gradle-version=5.1.1(而不是我最初错误地在那里发布的./gradlew)。原因是Gradle是在Java上运行的。你可以使用任何工作的Gradle发行版来更新你的Gradle -wrapper,无论是你系统范围内安装的Gradle还是Gradle -wrapper本身。然而,在这种情况下,你的包装器与你安装的Java版本不兼容,所以你必须使用系统级的Gradle(又名gradle而不是./gradlew)。

由于distributionUrl仍然指向旧版本,升级包装器使用:

gradle wrapper --gradle-version 5.1.1

注意:使用gradle而不是gradlew

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

$ export JAVA_HOME=

我也遇到过同样的问题。升级到gradle 5.0对我来说很有用。

这个链接提供了如何安装gradle 5.0的详细步骤

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

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

    然后重建。< / p >

*别忘了先备份你的项目*

因为你的包装器版本不支持11+,你可以让简单的技巧欺骗新版本的InteliJ永远

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

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

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

长话短说,使用系统gradle工具升级你的gradlew。请注意,即使您的系统gradle版本为< 5,下面的升级也可以工作。

gradle wrapper --gradle-version=5.1.1

以我为例,我试图为一个旧的Unity 3D项目构建和获得APK(这样我就可以在我的Android手机上玩游戏)。我使用的是最新的Android Studio版本,我可以通过Android Studio的SDK管理器下载所有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不支持JDK 10, 如这里所述。我的建议是:

  1. 卸载不需要的JDK如果你已经安装了一个。
  2. Head here
  3. 登录/打开Oracle帐户(如果尚未登录)。
  4. 下载旧的但功能强大的JDK 8用于您的计算机设置(32位/64位,Windows/Linux等)
  5. 安装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 Path。(从Android Studio > SDK Manager > Android SDK > Android SDK Location获取。)
  9. 如果需要,重新启动计算机使更改生效。

我有一个类似的问题:我的默认gradle wrapper是版本4。在Gradle 5中添加了对更高版本Java的支持。

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

TLTD:

./gradlew wrapper --gradle-version 5.6.2

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

得到项目文件.. gradle/wrapper/gradlewrapper.properties < / p >

在那里,你可以将distributionurl的值更改为最新版本。(在docs.gradle.org上找到)

我在这里也有同样的问题。 在我的情况下,我需要使用旧版本的JDK,并且我正在使用< >强sdkmanager < / >强来管理JDK的版本,因此,我将虚拟机的版本更改为1.8
sdk use java 8.0.222.j9-adpt

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

博士tl;:通过运行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

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

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

当我试图用JDL 11.0.7安装Gradle-2.4时,我在Docker设置中也遇到了同样的问题。我必须安装一个以后的版本来解决这个问题。

下面是Working 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


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

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

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

因为包装器检查JAVA_HOME,你可以在每次运行时选择任何你想要的。

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

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

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

解决方案:

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

enter image description here

如果你使用的是android studio 4.2.2版本,那么它将以默认的Java 11.0.8启动

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

将11.0.8修改为JDK 8

1-安装JDK8

2-安装选择运行时插件

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

actiontab

4-选择runtime,并在列表中选择jdk 8

selectjdk

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

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

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

  2. 升级Gradle包装

    • 如果你的电脑上安装了Gradle:

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

      1. < p >修改gradle /包装/ 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

转到__abc0,用最新的gradle版本更新distributionUrl

https://gradle.org/releases/获取最新版本,然后在这里编辑它。

https\://services.gradle.org/distributions/gradle-7.3.3-all.zip

7.3.3是最新的版本。

https\://services.gradle.org/distributions/gradle-#latest_gradle-version#-all.zip

导航到Project/gradle/wrapper/gradle-wrapper.properties,手动将distributionUrl更改为distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-bin.zip,它工作了,希望这能帮助到某人。

打开你的“项目文件夹/gradle/gradle-wrapper.properties"在disbutionurl中,你的gradle版本被提到,从在这里中检查新的更新的gradle版本,并在"distributionUrl"并完成了!

我在Windows上运行Gradle。

在我的例子中,我已经在我的系统中有了旧的Gradle版本,并将其设置为“环境变量”。

这就是错误发生的原因。

所以我删除了旧版本,将新版本设置为“环境变量”。- path变量,它开始工作。

如果你正在开发一个遗留项目;将gradle版本升级到6.9,将gradle插件版本升级到4.2.2。这是Gradle版本,你可以安全地打开没有任何破坏。