在MacOS上使用AdoptOpenJDK 11和Gradle时不支持发布版本11。

3

当运行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.gradle 的相关部分

...
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 toolchains使用java 12,则gradle将下载jdk12,并且再次可以正常构建。
  • 通过命令行从现有的JDK11运行javac来编译一个虚拟的hello world文件也能正常工作(例如:/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin/javac --release 11 HelloWorld.java)。

我怀疑重新安装JDK会解决这个问题,但我真的很感激任何有关如何进一步调试此问题以及了解为什么会出现这种情况的线索。

更新

尝试了几个调试步骤后,构建现在可以工作,原因我不知道。不幸的是,我不知道最初为什么不起作用,并且无法再次重现问题以进行进一步的调试。对于未来可能遇到这个问题的人们,请参考以下调试过程中我所做的一些步骤。其中之一显然修复了该问题,尽管我不知道是什么:

  • 删除java toolchains部分并尝试以这种方式构建,然后再添加回java toolchains部分
  • 尝试构建设置java toolchains使用java 12(这导致gradle自动提供了jdk12)
  • 运行gradle -q javaToolchains
  • ~/.gradle/jdks中删除被gradle自动配置的jdk12

1
如果是为他人构建,团队应该在某个地方共享先决条件。 你能否更新问题,告诉我们 gradle -q javaToolchains 的输出是什么?如果未设置自动检测,请查看 https://docs.gradle.org/6.8.2/userguide/toolchains.html#sec:custom_loc - Naman
@Naman 通常的先决条件是安装JDK11,这里已经安装了。更新了额外信息。 - Krešimir Nesek
好的,尝试在构建时使用--full-stacktrace,这样我们就可以看到可能的详细信息(无论何时你再次遇到它)。 - Naman
1个回答

1
在一个没有安装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'来安装SDK以及JDK,并运行'./gradlew --stop'来杀死守护进程,这为我解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接