使用 ./gradlew 运行 执行任务 ':app:compileJava' 失败

Execution failed for task ':app:compileJava' with ./gradlew run

当我尝试在我的 gradle 项目中使用“./gradlew 运行”时,我收到此错误:

* What went wrong:
Execution failed for task ':app:compileJava'.
> java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x1fa4cfc5) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x1fa4cfc5

我已经尝试了多个不同的项目,但仍然无法正常工作。我相信这与 gradle 期望不同版本的 Java 有关,因为我正在使用 java 16,当我检查“gradle -v”时它说“ JVM:15.0.2”。我不确定如何解决这个问题,或者这是否是问题所在。任何帮助将不胜感激!

原来我的 Path 系统变量中有多个 java 路径。我删除了除正确的以外的所有内容,然后添加了一个 JAVA_HOME 系统变量,其值为 JDK (C:\Program Files\Java\jdk-"version").

使用 JDK 17 我也收到了类似

的错误消息
java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x1fa4cfc5) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x1fa4cfc5

我能找到的唯一解决方案是创建一个环境变量

JDK_JAVA_OPTIONS='--add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED'

我认为这个问题的根本原因是 Gradle 版本和正在使用的 JDK 版本不匹配。一应参考compatibility matrix.

例如,对于 Java 17 运行时,至少需要 Gradle 7.3.

我遇到了“IllegalAccessError”问题,就我而言,通过在 Eclipse Gradle (Buildship) 首选项中选择“特定 Gradle 版本”7.4 解决了这个问题。

确保 JDK 和 Gradle 版本的正确匹配是 environment-specific 但我认为一旦确定这一点,问题就会消失。