Class 文件版本 52.0 错误,应该是 50.0

Class file has wrong version 52.0, should be 50.0

我正在尝试在 IntelliJ idea 中编译我的项目。我在外部 jar 文件中使用 class,编译时收到以下错误。

Class file has wrong version 52.0, should be 50.0

我知道这是说 jar 文件是用比 IntelliJ 使用的版本更新的 Java 版本编译的。我的问题是如何使它们兼容?我已将 Mac 上的 Java 更新为 1.8,当我 运行 java -versionjavac -version 时,它证实了这一点。

我错过了什么? (除 Java 开发经验外)

Select "File" -> "Project Structure".

下 "Project Settings" select "Project"

从那里您可以 select "Project SDK"。

表示你的Java运行时版本是1.6,但是你的编译器版本(javac)是1.8。简单的解决,把你的JVM版本提前到1.8就可以了。

但如果您不想更改 Java 运行时版本,请执行以下步骤:

  1. JAVA_HOME= "your jdk v1.8 folder path",以确保 jdk 也是 v1.8 并再次使用 java -versionjavac -version 以确保
  2. 确保 IntelliJ 的编译器模式设置为与 v1.6 兼容 但我已经试过了。它没有解决我的问题。

当 运行 java 通过 ant 时,我遇到了同样的问题 "Class file has wrong version 52.0, should be 50.0"...我所做的只是添加 fork="true" 无论我在哪里使用 javac 任务,它都有效...

由于尝试使用 java 8 编译我的项目失败,然后重新尝试使用 java 6 进行编译,出现了与 header 中相同的错误。一些 类 第一次尝试用 8 编译,没有用 6 重新编译。混合 类 然后没有编译。清洁项目解决了这个问题。 这个答案与问题并不严格相关,但可能对某人有用。

在您的 IntelliJ idea 中找到 tools.jar 将其替换为来自您的 JDK8

的 tools.jar

如果你使用javac编译,出现这个错误,那么 删除所有 .class 个文件

rm *.class     # On Unix-based systems

并重新编译。

javac fileName.java

如果错误来自外部依赖 (maven/gradle),您导入的版本需要更新的jdk。 (例如,您导入了咖啡因 3.0.x,这需要 java 11,但您使用的是 java 8.

解决方案:将依赖降级到与您的jdk兼容的最新版本。

Java 版本号可以在 Java class file wiki page(字节偏移量 6-7)中找到。

如果 IntelliJ 中出现问题,则在终端中执行此操作(而不是在 IntelliJ 终端中)- 1.change 适当的 java 版本(在我的例子中使用 jdk 1.4 作为问题是 class file has wrong version 55.0, should be 52.0) 2. java -Dspring.profiles.active=test -jar build/libs/<jarname>.jar
运行 这个

通常,当您尝试 运行 使用另一个版本的 java 编译的 .class 文件时,就会发生这种错误。 在你的情况下,它是用 java 8 (主要版本 -> 52) 编译的,你想 运行 用 java 6 (主要版本 -> 50).

这里是 java 和 SE 版本的主要版本列表: https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-4.html#jvms-4.1-200-B.2

要解决此问题,请根据您的项目结构使用相同版本的已编译 class 文件。 在 Intellij Idea 中:文件 |项目结构 |项目 |项目 SDK

如果使用像 maven 这样的构建工具,也应该在相应的设置中更改此配置。这是在 pom 文件中如何完成的示例:

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

错误意味着您可能拥有在 Java 11 中编译的依赖项,但您正在使用 Java 8 因此,还有两个选项可以迁移到 Java 11 或要求库开发人员为您提供 Java 8 build.