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


133

我发表以下评论:

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

5
根据此错误报告,您的gradle包装器是否可能更旧?
冷冻豌豆罗迪

我的gradle版本是5.1.1,我认为应该没问题。
lesley2958 '19

2
您运行命令./gradlew,它启动与此特定项目关联的gradle版本。无法保证项目的版本与您安装的版本相同(5.1.1)
tryman

1
该版本信息是gradle --version或的结果./gradlew --version吗?基于Gradle的项目通常使用包装器,以使不同的开发人员更容易使用相同的Gradle版本来构建项目。这也使构建更加稳定。
Slaw

那就是gradle --version
lesley2958 '19

Answers:


123

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

  1. 系统范围内的摇篮
    本申请通过援引gradle (arguments)

  2. gradle这个-包装
    的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 在Gradle 5.0中添加了对JDK 11的支持。因此,由于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之间的任何重大更改的影响,然后可以通过从项目文件夹中的命令行执行来更新包装器:gradle wrapper --gradle-version=5.1.1[ *]。

如果gradle app:installDebug无法正确执行,则可能需要升级Gradle构建脚本。从v.4.1RC1更新到5.1.1,该摇篮工程提供了指导(12)有重大更改和次要版本之间已过时的功能,这样就可以逐步更新到最新版本。

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

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


1
@tryman谢谢!对我来说,正是您的更新2帮助了我。作为一般经验法则,我认为我将检查gradle版本。
Avid程序员,

您没有确切说明错误的原因是什么。不同的版本?
若奥·皮门特尔·费雷拉

什么?我以为Update 2很清楚。她试图用JDK11运行4.1RC1版的Gradle包装器。Gradle在5.0版中添加了对JDK11的支持。那么,您对@JoãoPimentelFerreira的困惑是什么?这就是原因,剩下的就是如何将项目的包装程序更新为支持JDK11的更高版本的解决方案。
tryman,

1
现在轮到我感到困惑了。如果确实在项目文件夹中同时安装了gradle包装器和适当的系统级Gradle安装,则上述逐步解决方案将为您工作。您是否尝试通过在项目文件夹中执行update命令来升级包装程序gradle wrapper --gradle-version=5.0?用您想要的版本替换5.0,我想现在最新的是5.4
tryman

1
但是请注意:在包装的3.3版本与任何5.x版本之间,可能会或可能不会遇到一些重大更改。这就是为什么在我的回答中,我指向您首先使用您的系统范围内的Gradle构建项目,以在更新项目的包装程序之前验证您要升级到的5.x版本是否一切运行正常。如果有急事(我觉得您很紧迫),您可以随时直接使用系统gradle或降级到较旧的JDK,并在以后升级包装程序。
特曼

34

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

gradle wrapper --gradle-version 5.1.1

注意:使用gradle与否gradlew


这样可行。该命令更新了我的gradle包装器版本。谢谢。
丹尼尔(Daniel)

或者仅用gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip JDK12 替换版本6 中的版本似乎不起作用。5.1.1工作正常,谢谢。
利亚姆·克尼根

11

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

$ export JAVA_HOME=


1
这也解决了我的问题。jenv最初可能会开始我的问题。
jokarl

对我来说GRADLE_HOME已经更新(到5.4.1''),但是没有gradle版本(仍然指向旧版本4.3),这很奇怪,但是重新启动终端可以正常工作。奇怪的事情有source ~/.bash_profile
prayagupd

7

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

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

6

tl; dr:通过运行降级Javaupdate-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'.

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

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

sudo update-alternatives --config java


3

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

gradle wrapper --gradle-version=5.1.1


2

我有同样的问题。升级到gradle 5.0帮了我大忙。

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



1

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


0

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

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

    然后重建。

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


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中修复。


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不支持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,请打开环境变量并通过右键单击My更改Java Path。 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上)


0

我正面临泊坞窗设置了同样的问题,当我尝试安装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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.