当运行gradle构建(适用于我团队中的其他开发人员(时,我得到:
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工具链块被完全删除,项目将使用当前JVM进行良好构建
- 如果java工具链被设置为使用java12,gradle将下载jdk12,并且它再次构建良好
- 通过命令行从现有的JDK11运行javac来编译一个伪helloworld文件也很好(例如
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin/javac --release 11 HelloWorld.java
(
我怀疑重新安装JDK会解决这个问题,但我真的很感激任何关于如何进一步调试并理解为什么会发生这种情况的线索。
更新
在尝试了几个调试步骤后,由于我不知道的原因,构建现在可以工作了。不幸的是,我不知道为什么它最初不工作,也无法再次重现问题以进行进一步的调试。为了将来参考可能遇到这个问题的人,以下是我在调试过程中所做的一些步骤。其中一个显然解决了这个问题,尽管我不知道如何解决:
- 删除了java工具链部分并尝试以这种方式构建,然后添加回java工具链
- 尝试构建设置的java工具链使用java12(这导致gradle自动提供jdk12(
- 运行
gradle -q javaToolchains
- 从
~/.gradle/jdks
中删除jdk12(由gradle自动提供(
在一台根本没有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--停止以杀死守护进程为我修复了它。