运行 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