java - 在带有 AdoptOpenJDK 11 的 MacOS 上使用 Gradle 时不支持发布版本 11

标签 java macos gradle java-11 adoptopenjdk

当运行 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 工具链 block ,则可以使用当前的 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 工具链部分
  • 尝试build设置 java 工具链以使用 java 12(这导致 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 不可用!

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

关于java - 在带有 AdoptOpenJDK 11 的 MacOS 上使用 Gradle 时不支持发布版本 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67384560/

相关文章:

mysql - 如何摆脱 MySQL 中的 STRICT SQL 模式

python - Mac OS X 上的 Pip ImportError : cannot import name walk_packages

java - 运行应用程序时,Intellij 不包括对类路径的 gradle 依赖

java - 二进制字符串的 NumberFormatException

JavaFX - getScene() 返回 null

带有关于 CGSEventRecord 的消息的 Java Key Listener Error

java - 线程中出现异常 "main"java.lang.UnsatisfiedLinkError : no GurobiJni56 in java. library.path

java - 在 Java 中重构 Import 语句

gradle - 无法在PACT Broker中发布 'Last Verified'状态

java - 无法使用 ShadowJar 运行构建的 gradle 项目 NoClassDefFoundError