如何在 IntelliJ IDEA 中修复“不支持的类文件主要版本60”?

我有一个在 Ubuntu 的 格拉德尔项目。它是用 Java14编写的。我安装了 Java14 JDK。当我从命令行构建它时,一切都可以工作,但是没有人想要使用命令行!当我在 IntelliJ IDEA 中打开它时,它会抛出一个错误:

* Where:
Initialization script '/tmp/ijmapper.gradle`


* What went wrong:
Could not compile initialization script '/tmp/ijmapper.gradle`.
> Startup failed:
General error during semantic analysis: Unsupported class file major version 60.

然后是一个冗长的、无用的堆栈跟踪,它说明了很多关于 Groovy 的东西。(该项目不是 Groovy 项目,而是 Java 项目。)

主版本60是指本计划没有使用的 Java16, 。我已经进入了 工程项目结构,并确保它被设置为使用 JDK 版本14。但是“ ijmapper”这个名称表明这与 IntelliJ 有关,这可能是一个 IDE 问题,而不是一个项目问题。

Mapper 文件只是说:

if(!ext.has('mapPath')) ext.mapPath = { path -> path}

换句话说,一个简单的填充物。

这是怎么回事,我该怎么补救?

280382 次浏览

你需要一个与你的 Gradle版本兼容的 Java版本,并且配置 Gradle 来使用那个版本(不是旧版本的 Java,甚至不是新版本)。


我通过改变 IntelliJ 设置中的 Gradle JVM 设置来解决这个问题:

  • 设置/首选项对话框中,转到 构建,执行,部署构建工具格拉德尔

  • 格拉德尔部分下,更改 分级 JVM选项。选择适合您的 分级 JVM

    Enter image description here

参见 解决现有项目的 Grade JVM 版本问题

升级 Gradle 版本6.8.3到7.0解决了我的问题。你可以升级它:

  • 菜单 档案工程项目结构工程项目(左侧面板)
  • 更改为 Gradle 7.0版

它可以与 Android Gradle 插件4.2.0版本一起使用。

我也修好了,用了最难的方法:

爪哇咖啡

  1. 安装了最新的 JavaJDK
  2. 通过添加 JAVA _ Home变量(没有 垃圾箱的主 Java 文件夹)修复了系统环境变量中的 Java 路径,并在 PATH 环境变量中添加了 % JAVA _ HOME% bin
  3. java -version现在显示正确的版本

格拉德尔

  1. 使用 https://gradle.org/install/从头安装 Gradle
  2. 修正了系统环境变量中的 Gradle 路径,方法是添加 GRAGLE _ Home变量(没有 垃圾箱的 main Gradle 文件夹) ,并在 PATH 环境变量中添加 % GRADLE _ HOME% bin
  3. gradle -version显示了正确的版本,包括正确的 JVM

IntelliJ IDEA 设置

  1. 转到 设定构建,执行,部署构建工具格拉德尔
  2. 编辑 Gradle 用户主页(C:/Gradle/Gradle-7.0.2)
  3. 使用 Gradle: C:/Gradle/Gradle-7.0.2
  4. Gradle JVM: JAVA _ HOME version 16.0.1

现在它构建没有错误: 不支持的类文件主版本60

我的项目是使用 Java16和 玛文来构建一个 SpringBoot 应用程序。我得到了相同的错误,并能够解决这些步骤:

  1. 导航到 IntelliJ IDEA → 偏好..。构建,执行,部署编译器→ * Java 编译器
  2. 选择“ Per-module bytecode version:”下的模块
  3. 单击红色“-”按钮删除自定义设置
  4. Apply

我认为这个字节码设置(16)与我的项目(11)中配置的字节码设置(16)有冲突。移除超驰装置就解决了。

对我来说,这是固定的升级格拉德版本。

在目录 abc0下的文件中,只需更改 Gradle 的版本号。例如,如果你的 Gradle 版本是 6.3,改变这一点:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip

致:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip

它在 档案工程项目结构工程项目中不适用于我所从事的项目。

对我来说,(在 颤动中)问题在于我使用的是 JavaJDK 版本 16,但是对于某些包,版本16是 不支持

因此,我将其降级为 JDK 版本 15

在 Windows 上,我做了以下操作:

  1. 关闭当前 IDE/终端(不要跳过此步骤)。

  2. 卸载当前的 JavaJDK 并重新启动计算机。

  3. 给你下载并安装 JavaJDK 版本15(您需要创建一个帐户才能下载)。

  4. 更新 环境变量

在我的案例中(Manjaro Linux) ,问题是在 OpenJDK16和 Gradle 有一个已知的 bug。(见: * “ 使用 Java16 # 16766的工具链 *)

解决方案是使用以下命令将 Java 指向 openJdk-11:

sudo archlinux-java set java-11-openjdk

确保这个 JDK 已经安装,在 Arch Linux和 Manjaro 上你可以用以下方式检查:

archlinux-java status

在切换到 OpenJDK11之后,一切都像预期的那样正常运行。

我也遇到了同样的问题,JDK 17似乎不兼容 Gradle 7.0.2。

下载 JDK 16 ,删除它 _somewhere_(接近其他 JDK 的文件夹或其他东西)

接下来,更新: 工程项目结构SDK 位置等级设置Gradle JDK以匹配 _somewhere_

最后,别忘了 用 Gradle 文件同步项目

目前,它不能与 JDK 17一起工作,因此建议在 设定/Gradle 中使用 IDE 提供的嵌入式 Java。

我也面临同样的问题,但是是 Android Studio。看起来 JDK 17并不像其他人提到的那样与 Gradle 7.0.2兼容。

我通过改变 Android Studio 设置中的 Gradle JDK 设置来解决这个问题:

菜单 档案设定构建,执行,部署构建工具格拉德尔

在 Gradle 部分,将 Gradle JVM 选项更改为另一个 JDK (例如: JDK11)。

稍后的 Gradle 版本(高于 7.3.2的版本)支持在 Java17上运行和构建。

弹簧工具套件(STS)/Eclipse 中,即使在更改了构建路径、编译器之后,默认的 JRE从16到11.0也没有修复。最后,在 STS.ini 文件中,我必须将 - VM参数从

-vm plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_16.0.2.v20210721-1149/jre/bin

-vm C:\Program Files\Java\jdk-11.0.12\bin

我用 安装的巧克力包装管理器修好它并运行

choco install -y nodejs.install openjdk8

在 PowerShell 管理中。

正如上面提到的那样,更改具有正确兼容性的页面: 兼容性矩阵

在我的例子中是7.3,因为我使用的是 JDK 17,而 Java 8对我来说是可行的!

// gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip