1

运行 gradle build (适用于我团队中的其他开发人员)时,我得到:

Execution failed for task ':compileJava'.
> error: release version 11 not supported

这是在 MacOS 上安装 AdoptOpenJDK11。

java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
 ./gradlew -version                    

------------------------------------------------------------
Gradle 6.8.2
------------------------------------------------------------

Build time:   2021-02-05 12:53:00 UTC
Revision:     b9bd4a5c6026ac52f690eaf2829ee26563cad426

Kotlin:       1.4.20
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          11.0.11 (AdoptOpenJDK 11.0.11+9)
OS:           Mac OS X 10.14.6 x86_64

echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

相关部分build.grade

...
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}
...
gradle -q javaToolchains
executing gradlew instead of gradle

 + Options
     | Auto-detection:     Enabled
     | Auto-download:      Enabled

 + AdoptOpenJDK 11.0.11
     | Location:           /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
     | Language Version:   11
     | Vendor:             AdoptOpenJDK
     | Is JDK:             true
     | Detected by:        Current JVM

似乎 gradle 的 java 工具链功能引起了问题。

  • 如果完全删除了 java toolchains 块,则项目使用当前 JVM 构建良好。
  • 如果 java 工具链设置为使用 java 12,gradle 将下载 jdk12 并再次构建良好。
  • 通过命令行从现有的 JDK11 运行 javac 来编译一个虚拟的 hello world 文件也可以正常工作(例如/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin/javac --release 11 HelloWorld.java

我怀疑重新安装 JDK 会解决这个问题,但我真的很感激任何关于如何进一步调试并理解它为什么会发生的线索。

更新

在尝试了几个调试步骤后,构建现在可以工作了,原因我不知道。不幸的是,我不知道为什么它最初不起作用并且无法再次重现问题以进一步调试。供以后可能遇到这个问题的人参考,下面是我在调试过程中做的一些步骤。其中之一显然解决了这个问题,但我不知道如何:

  • 删除了 java 工具链部分并尝试以这种方式构建,然后添加回 java 工具链部分
  • 尝试构建设置 java 工具链以使用 java 12(这导致 gradle 自动配置 jdk12)
  • 跑步gradle -q javaToolchains
  • 从中删除 jdk12(由 gradle 自动配置)~/.gradle/jdks
4

1 回答 1

0

在一台根本没有 Java 的(Linux)机器上,我安装了 Java 11 并得到了同样的错误。

我的堆栈跟踪中有趣的部分是:

Caused by: java.lang.IllegalArgumentException: error: release version 11 not supported
   at jdk.compiler/com.sun.tools.javac.main.Arguments.reportDiag(Arguments.java:891)
   at jdk.compiler/com.sun.tools.javac.main.Arguments.handleReleaseOptions(Arguments.java:311)
   at jdk.compiler/com.sun.tools.javac.main.Arguments.processArgs(Arguments.java:350)
   at jdk.compiler/com.sun.tools.javac.main.Arguments.init(Arguments.java:246)
   at jdk.compiler/com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:185)
   at jdk.compiler/com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:119)
   at jdk.compiler/com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
   at org.gradle.api.internal.tasks.compile.JdkTools$DefaultIncrementalAwareCompiler.getTask(JdkTools.java:131)

以及详细输出的这一部分:

2021-07-30T10:29:27.874+0000 [INFO] [org.gradle.jvm.toolchain.internal.DefaultToolchainJavaCompiler] Compiling with toolchain '/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64'.
2021-07-30T10:29:27.882+0000 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: --release 11 -d /home/tim/git/bma_emubroker/bma-emubroker/build/classes/java/main -h /home/tim/git/bma_emubroker/bma-emubroker/build/generated/sources/headers/java/main -g -sourcepath  -proc:none -s /home/tim/git/bma_emubroker/bma-emubroker/build/generated/sources/annotationProcessor/java/main...huge.line.tuncated

在尝试重建和运行工具链命令时,文件名完成向我指出 javac 不可用!

运行 'sudo yum install java-devel-11' 来安装除 JDK 之外的 SDK,并运行 './gradlew --stop' 来杀死守护进程为我修复它。

于 2021-07-30T10:52:05.547 回答