java - 如何修复 Gradle 在 Linux 上无法识别 Java 10?

标签 java linux gradle

在 Linux 上使用带有 Java 10 的最新 Gradle 版本时,它无法将 Java 的版本号识别为 10 作为有效的 Java 版本。如何在 Linux 机器上解决这个问题?记录错误的详细信息 here

这是完整的错误报告(注意,运行 gradle --versiongradle -v 也会给出相同的输出:

FAILURE: Build failed with an exception.

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

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

编辑: gradle --stacktrace

的输出
FAILURE: Build failed with an exception.

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

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

* Exception is:
java.lang.IllegalArgumentException: Could not determine java version from '10'.
at org.gradle.api.JavaVersion.toVersion(JavaVersion.java:70)
at org.gradle.api.JavaVersion.current(JavaVersion.java:80)
at org.gradle.internal.jvm.UnsupportedJavaRuntimeException.assertUsingVersion(UnsupportedJavaRuntimeException.java:29)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:32)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:210)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:174)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)

java --version 的输出

java 10 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)

最佳答案

您需要升级 Gradle。 4.5.1及以后的版本肯定支持Java 10。

如果您认为您已经安装了 4.5.1 或更高版本,但 gradle -version 仍然无法运行,则可能是当您在命令行键入 gradle 时,由于某种原因,它仍在运行旧版本。

一个常见的做法是将 gradle 别名为 ./gradlew,这样在 Gradle 项目的上下文中,您将使用包装器 Gradle 而不是系统 Gradle 。这通常是有帮助的,但在这种情况下,它适得其反。您应该能够使用 which 确定已安装的系统 Gradle:

> which gradle
/usr/local/bin/gradle
> $(which gradle) -version

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          10.0.1 ("Oracle Corporation" 10.0.1+10)
OS:           Mac OS X 10.13.4 x86_64

(我已经删除了一些关于非法反射访问的警告,如果你收到这些警告,请不要担心。)

如果$(which gradle) -version还是跑不了,需要升级系统gradle。但如果是这样,要更新 Gradle 包装器,您可以编辑 build.gradle --

task wrapper(type: Wrapper) {
  gradleVersion = '4.6'
}

-- 然后使用系统 Gradle 重新运行 wrapper 任务:

> $(which gradle) wrapper
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 7s
1 actionable task: 1 executed
> ./gradlew -version
Downloading https://services.gradle.org/distributions/gradle-4.6-bin.zip
......................................................................

[etc.]

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          10.0.1 ("Oracle Corporation" 10.0.1+10)
OS:           Mac OS X 10.13.4 x86_64

关于java - 如何修复 Gradle 在 Linux 上无法识别 Java 10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49663507/

相关文章:

java - 如何访问输出参数值

linux - 如何将脚本输出保存到具有迭代文件名的文本文件?

c - Hook sys_send

gradle - 构建Gradle构建的子项目,其中另一个子项目是Android

Java 标准构建器查询不为空或为空

java - 在 Java/SWT 中保存窗口状态

linux - 使用cmake创建一个无cmake的Makefile

java - Gradle 不包含可选依赖

android - Gradle:在基于应用程序 build.gradle 风格的本地库上使用 setIgnore。

java - JPA 中的表联接 - 创建包含联接的实体