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 版本的文件格式。
我对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 版本的文件格式。