Java IntelliJ IDEA中不支持ClassVersionError的故障排除

Java IntelliJ IDEA中不支持ClassVersionError的故障排除,java,intellij-idea,unsupported-class-version,java-runtime-compiler,Java,Intellij Idea,Unsupported Class Version,Java Runtime Compiler,我正在学习一门Java课程,使用Intellij IDEA。在这个“测试”项目中,我只有两个测试类,如下所示(它们实际上没有任何代码)。 在我开始讨论这个问题之前,我只需要声明我所有的项目都正确运行,只是我在运行terminal命令时遇到了以下问题,我担心我的IDE出了问题: 当我需要使用以下命令获取BankAccount类的串行版本时,就会出现问题: E:\Software Projects\Test\out\production\Test>serialver com.company.B

我正在学习一门Java课程,使用Intellij IDEA。在这个“测试”项目中,我只有两个测试类,如下所示(它们实际上没有任何代码)。 在我开始讨论这个问题之前,我只需要声明我所有的项目都正确运行,只是我在运行terminal命令时遇到了以下问题,我担心我的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”

当我在项目中转到“运行/调试配置”时,在Application>Main的JRE中,我要选择以下内容(但据我所知,这些都是同一个SDK,对吗?)

  • 默认值(12-测试模块的SDK)
  • 12(java版本“12.0.1”)
  • “C:\Program Files\Java\jdk-12.0.1”
所以我不知道如何调整这里的任何内容?我如何能够在任何时候在更新的Java运行时版本中编译这些类

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

课程包括:

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\production\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\production\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版本上运行它

解决方案可能是,使您的代码可以在较旧的Java版本上运行,或者调整您的
路径
环境,使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

通过编辑文件“idea.properties”并设置适当的JVM版本来解决此问题。您有哪些设置?您的项目中有哪些设置?我启用了“将编译器用于模块目标…”。在“项目字节码版本”下,我没有选择任何内容,因此我现在尝试选择12和13。在“每个模块字节码版本”下,我选择了具有“与语言级别相同”,但我仍然得到相同的错误。您使用的IntelliJ IDEA版本是什么?请分享。我正在使用IntelliJ IDEA 2019.2。除了上面的内容,我不知道是否还有其他关于这个主题的内容可以分享。该示例的代码非常少,并且产生相同的错误(至少在我的IDE上).P.S.很抱歉,回复有点晚。此外,我尝试通过终端运行Main函数,得到的错误显然与同一问题有关(我将在帖子中添加此错误)Zip并共享项目目录。正如您所说,我可以使用完整命令运行它。我已将目标级别调整为12,但除非运行完整命令,否则仍然无法使用它。但我想我们已经跟踪了我的问题,以下是我在运行java-version:openjdk version“11.0.3”2019-04-16 openjdk运行时环境时得到的结果(build 11.0.3+12-b304.10)OpenJDK 64位服务器VM(build 11.0.3+12-b304.10,混合模式)现在无论我在项目设置/设置中做了什么更改,它仍然保持在11.0.3。但我认为这可能是解决方案,因为当我转到“切换引导运行时”或“切换引导JDK”时“它为我提供了11.0.3和12.0.1,我的JDK目前在这两个选项中都选择了11.0.3。当我打开“Switch IDE Boot JDK”时,它会给我以下警告:“更改这些值可能会导致IntelliJ IDEA的不必要行为。除非有人要求,否则请不要更改这些。”。我尝试在“Switch IDE Boot JDK”和/或“Switch Boot Runtime”中从11.0.3更改为12.0.1是否安全?更新:我已将“Switch Boot Runtime”从build 11.0.3更改为build 12.0.1,现在一切正常!当我转到“Switch IDE Boot JDK”而不是11.0.3时,它会说“”现在。我也可以在那里选择12.0.1-你也建议更改它吗?@Armino如果你从IntelliJ IDEA终端运行它,这将是一个已知的问题:。如果你在IntelliJ IDEA之外运行它,你需要更改路径而不是启动运行时。你能更具体一点,并从IDEA.properties中发布一个片段吗?