当运行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
gradle -q javaToolchains
的输出是什么?如果未设置自动检测,请查看 https://docs.gradle.org/6.8.2/userguide/toolchains.html#sec:custom_loc - Naman--full-stacktrace
,这样我们就可以看到可能的详细信息(无论何时你再次遇到它)。 - Naman