【问题标题】:Class file has wrong version 52.0, should be 50.0类文件的版本错误 52.0,应该是 50.0
【发布时间】:2015-03-26 16:24:34
【问题描述】:

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

Class file has wrong version 52.0, should be 50.0

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

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

【问题讨论】:

  • 你应该检查你的项目中的 sdk 配置(在 intelliJ 中)——也许你还在使用旧版本——这取决于你的配置
  • 您找到解决方案了吗?就我而言,我切换到使用 java 7 并且一切正常。
  • “您正在尝试使用运行时/编译器 JRE/JDK 6 运行/引用使用 JDK 8 编译的类。”检查接受的答案 - stackoverflow.com/questions/29906659/…
  • 这仍然是 intellij 2020.2 尝试从 java 8 切换到 java 14 的问题

标签: java intellij-idea


【解决方案1】:

选择“文件”->“项目结构”。

在“项目设置”下选择“项目”

您可以从那里选择“Project SDK”。

【讨论】:

  • 如果使用 Gradle,连同上述设置,请同时选择合适的 Gradle JVM 设置。对于 IntelliJ IDE,它在选项卡下:“IntelliJ IDEA”->“构建、执行、部署”-> Gradle,并在“Gradle Projects”下更新 Gradle JVM
  • 想知道这个步骤顺序是如何回答问题的,因为这只是使用另一个 SDK 的问题,而不是问题所问的问题
【解决方案2】:

这意味着您的 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运行时版本是1.8,而你的编译器版本(javac)是1.6,简单解决,把java版本从1.8退到1.6就行了。 - 相反
  • 我根据@KrzystofWolny 的评论更正了答案。另见stackoverflow.com/a/4692743/7769052
【解决方案3】:

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

【讨论】:

  • 清洁项目不适合我。我刚刚删除了抛出错误的类,并进行了干净的构建以使它们在 1.6 中编译。这解决了我的问题。
【解决方案4】:

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

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

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

【讨论】:

    【解决方案5】:

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

    rm *.class     # On Unix-based systems
    

    然后重新编译。

    javac fileName.java
    

    【讨论】:

      【解决方案6】:

      当您尝试运行使用另一个 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

      要解决此问题,请根据您的项目结构使用相同版本的已编译类文件。 在 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>
      

      【讨论】:

        【解决方案7】:

        该错误表示您可能拥有在 Java 11 中编译的依赖项,但您使用的是 Java 8,因此,您有两个选择可以迁移到 Java 11 或要求库开发人员为您提供Java 8 版本。

        【讨论】:

        • 你说的版本不对。它应该是 8 (52.0) 和 6 (50.0) 而不是 11 (55.0) 和 8。
        【解决方案8】:

        我在通过 ant 运行 java 时遇到了同样的问题“类文件的版本错误 52.0,应该是 50.0”...我所做的只是在我使用 fork="true" 的地方添加 javac 任务,它成功了......

        【讨论】:

        • 在配置中添加 fork = true 对我不起作用。
        【解决方案9】:

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

        【讨论】:

        • 你能更具体地了解 参数吗?如果我的错误是bad class file: /usr/share/openjfx/lib/javafx.graphics.jar!/javafx/application/Platform.class class file has wrong version 54.0, should be 52.0 Please remove or make sure it appears in the correct subdirectory of the classpath.,那么jarfile 是graphics.jar
        【解决方案10】:

        在你的 IntelliJ 想法中找到 tools.jar 用你的 JDK8 中的 tools.jar 替换它

        【讨论】:

        • 不要这样做。公认的答案是正确的,并且这种选择可能会导致各种奇怪。
        猜你喜欢
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        相关资源
        最近更新 更多