Java - JAR 文件不会从终端命令行执行

Java - JAR file would not execute from the terminal command line

我对Java比较陌生 我完成了教程,其中解释了如何创建和 运行 JAR 文件的示例。 您能否就如何在命令行中 运行 我的 JAR 提出建议?

我创建了 JAR 文件:

此 Jar 文件已复制到桌面

我希望命令:java -jar 06_02.jar 应该执行文件。

在 IntelliJ 终端中,我切换到桌面目录(文件所在的位置)和 运行:
java-罐子06_02.jar

这会导致错误:

错误:发生JNI错误,请检查您的安装并重试 线程“main”中的异常 java.lang.UnsupportedClassVersionError:com/example/java/Main 已由更新版本的 Java 运行 编译 time(class 文件版本 55.0),此版本的 Java 运行time 只能识别 class 文件版本高达 52.0

at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access0(Unknown Source)
    at java.net.URLClassLoader.run(Unknown Source)
    at java.net.URLClassLoader.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

同时,如果我从 IntelliJ GUI 执行 JAR 文件,它正在运行:

我的项目设置是:

请帮我解决这个错误。

我的机器上也有 Java13:

当您在命令行中键入 java -jar myjar.jar 时,您的命令行首先会执行各种操作来弄清楚您的实际意思。特别是,java 被翻译成一些可执行文件的绝对路径。它通过扫描名为 PATH 的环境变量来查找目录,然后依次检查每个目录是否包含名为 java.exe 的文件。如果是,那就是假设你的意思。

您的 shell 以这种方式找到的 java.exe 来自 JDK8 安装 java.exe。我知道因为 class 文件 v52 是 JDK8 produces/is 最大。 JDK8 可以 运行.

您的代码,如您的 intellij 屏幕截图所示,配置为至少 JDK11(我知道因为版本 55 是 JDK11s 及更高版本在 -release 11 模式下生成的,鉴于这些屏幕截图,这就是您正在做的事情)。

因此,修复是以下 3 个之一:

  • 明确地 运行 这与 JDK11。不要 运行 java -jar foo.jar, 运行 C:\Program Files\Adoptium\JDK11\bin\java.exe -jar myjar.jar 之类的(那个路径不太正确,我不知道你的硬盘是什么样的,但你得到了想法)。
  • 弄清楚如何在您的系统上配置默认 JDK。这又取决于许多因素;每个 OS 的做法都不同。有时,运行 的 java.exe 只是一个包装器可执行文件,它检查一些其他设置,例如 JAVA_HOME 或注册表项,以了解 'active JDK' 是什么,然后运行就是这样。在这种情况下,您必须修复 JAVA_HOME 或诸如此类的东西 - 检查您的系统上是否安装了 java 配置应用程序。或者,只需卸载 JDK8,并祈祷它回落​​到 JDK11(或 re-install 那个)。有时只是编辑 PATH 的问题。
  • 告诉 intellij 你想改为 JDK8。请注意,您将无法使用 JDK9、10 中引入的任何语言功能(例如 var)或 API(例如新的 HTTP 客户端)或 11,当然。

大概您应该在此处处理第二个选项。

您已经为 Java 11(class 文件格式版本 55)编译了您的代码,并且您尝试 运行 使用 Java 8(class 文件格式版本 52).

Java 8 不理解 class 之后 Java 版本的文件格式。