java - 对 IntelliJ IDEA 中的 UnsupportedClassVersionError 进行故障排除

标签 java intellij-idea unsupported-class-version java-runtime-compiler

我正在使用 Intellij IDEA 学习 Java 类(class)。在这个“测试”项目中,我只有两个测试类,如下所示(它们实际上没有任何代码)。 在解决这个问题之前,我只需要声明我的所有项目都运行正常,只是我在运行终端命令时遇到以下问题,而且我担心我的 IDE 搞砸了:

当我需要使用以下命令获取 BankAccount 类的串行版本时,就会出现问题:

E:\Software Projects\Test\out\production\Test>serialver com.company.BankAccount

我收到如下所示的错误,并且我知道这些类是由较新的 Java 运行时错误编译的,但如何在 Intellij 中解决此问题?在任何项目中的任何类上运行该命令时,我都会遇到相同的错误。

附加说明:使用 java com.company.Main 在终端中运行 Main 类时,我也遇到与此相关的错误

我认为可能是问题的原因:在第一次尝试“serialver”之前,我更改了项目文件夹的名称(我刚刚在 Windows 中的文件资源管理器中使用了“重命名”,它搞乱了 Intellij 中的所有内容(无论我打开什么项目,它都没有 SDK,也没有运行/调试配置)。因此,我在项目上选择了“添加 SDK”(或类似的内容),并从列表中选择了 JRE 12。 然后我运行“Debug Main”并自动设置运行/调试配置。

当我进入“项目结构”>“项目设置”>“SDK”时,我只有一个 SDK:“C:\Program Files\Java\jdk-12.0.1”。

当我进入项目中的“运行/调试配置”时,在“应用程序”>“主要”的 JRE 中,我可以选择以下内容(但据我所知,这些都是同一个 SDK,对吧?) :

  • 默认(12 - “测试”模块的 SDK)
  • 12(java版本“12.0.1”)
  • “C:\Program Files\Java\jdk-12.0.1”

所以我不知道如何调整这里的任何内容?我如何能够在任何时候在较新的 Java 运行时版本上编译这些类?

这里的问题是我不确定是否还有其他问题,或者我之前所做的调整是否搞砸了。

类(class):

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
    }
}

package com.company;

public class BankAccount {
}

运行时 E:\Software Projects\Test\out\product\Test>serialver com.company.BankAccount

我在终端中收到以下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/company/BankAccount has been compiled by a more recent version of the Java Runtime (class file version 56.
0), this version of the Java Runtime only recognizes class file versions up to 55.0
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
        at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
        at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at jdk.compiler/sun.tools.serialver.SerialVer.resolveClass(SerialVer.java:108)
        at jdk.compiler/sun.tools.serialver.SerialVer.serialSyntax(SerialVer.java:80)
        at jdk.compiler/sun.tools.serialver.SerialVer.main(SerialVer.java:188)

使用 E:\Software Projects\Test\out\product\Test>java com.company.Main 运行主类时出错:

Error: LinkageError occurred while loading main class com.company.Main
        java.lang.UnsupportedClassVersionError: com/company/Main has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 55.0

最佳答案

在命令行中运行java -version。如果不是 Java 12 或更高版本,则会解释该问题。您的目标是 Java 12 版本,而在较旧的 Java 版本上运行它。

解决方案是 adjust the target language level以便您的代码可以在较旧的 Java 版本上运行,或者调整您的 PATH 环境,以便 JDK 12 安装目录中的 java 位于第一个。或者,您可以在尝试运行代码时在命令行中指定 java.exe 的完整路径:

E:\Software Projects\Test\out\production\Test>"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" com.company.Main

关于java - 对 IntelliJ IDEA 中的 UnsupportedClassVersionError 进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57366359/

相关文章:

java - PMD 和 FindBugs 冲突

java - Spring:AbstractTransactionalDataSourceSpringContextTests 是否延迟加载 bean?

Java @RunWith 在 Intellij 中无法运行

android - 'normal' Kotlin 和 Kotlin for android 有区别吗?

gradle - IntelliJ 上的 Kotlin Multiplatform 每次都尝试下载 native 依赖项

java - Netbeans 可以构建并运行 java 可执行文件;但是当在 Netbeans 之外执行应用程序时,它不会运行

java - 尽管 Java 版本相同,但仍出现 UnsupportedClassVersionError

java - 使用CDI和OSGI时出错

java - 如何在 Java 中单击 jbutton 时启动操作

java - 如何修复 java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本