我应该如何编译针对 Java SE 8 的 java 项目?

How should I compile my java project targeting Java SE 8?

我有一个 Java 项目(一个玩 connect 4 的应用程序),我想把它变成一个可执行文件。我在 VsCode 中创建了这个项目,并且我正在使用 Java 语言服务器(请参阅下面的详细信息)。我提取了 .jar 文件,并使用 Launch4J 将其转换为可执行文件,当我 运行 它时,我收到一条错误消息(见下文)。
我研究了这个问题,看来我需要针对 Java SE 8 而不是 17(我目前安装了 17)来编译我的代码。任何人都可以向我解释我应该如何做,或者我做错了什么吗?

该项目有多个文件。我不确定这是否相关,但该项目没有外部依赖项,尽管它确实使用 javax.swingjavax.soundjava.awt(以及 java.io.File, java.io.IOException 和 java.util.Random,但我很确定它们是不相关的)。

eclipse如果需要的话我也安装了,但是我今天才安装的,完全没有使用经验。我使用的 JDK 是(我相信)版本 1.8.0_321。 (至少这是我输入 java -version 时得到的结果。) Java 编译器版本为 javac 17.0.2

当我尝试 运行 Launch4J 生成的可执行文件时,这是我得到的错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 61.65535), this version of the Java Runtime only recognizes class file versions up to 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)

并且弹出错误:

Java Virtual Machine Launcher  
Error: A JNI error has occurred, please check your installation and try again.

以下是我在 Launch4J 中使用的设置:

Output File: C:\Users\username\OneDrive\Coding\Java Connect 4 v.2\Connect 4.exe
Jar: C:\Users\username\OneDrive\Coding\Java\Java Connect 4 v.2\Java Connect 4 v.2.jar
Don't wrap the jar, launch only: NOT ticked
Wrapper Manifest: none
Change dir: .
Command Line args: none
Process priority: Normal
Both Options NOT ticked
Min JRE version: 1.2.0, Prefer public JRE, but use JDK runtime if newer
Max JRE version: none, First 64-bit, then 32-bit.(这是默认值。)
所有其他设置都是默认设置。

@Holger 已经回答了这个问题。问题的答案是在 JLink 的帮助下随应用程序一起发送自定义 JRE 映像。这样无论JRE的本地版本如何都可以使用。