忘记尝试创建一个包含 JavaFX 组件并依赖于预安装 JVM 的可执行 jar(它不是受支持的配置)。
但是,cwellm's answer here详细介绍了一种方法,通过将JavaFX模块保留在添加到模块路径的单独jar中,将模块化JavaFX依赖项与创建的应用程序jar分开,我相信这可能是一个有效且受支持的部署配置。它确实需要在正确的位置将多个 jar 文件部署到客户端才能正常工作。另一种选择是假设一个 JDK 的发行版,例如 liberica 或 corretto,它可以与基本 JDK 发行版中包含的 JavaFX 一起提供,那么您不需要为 JavaFX 指定模块路径,因为它已经存在于默认值中JDK 的引导模块路径。
推荐解决方案
而是使用 jlink 创建运行时映像,这可以通过(以及其他方法)使用openjfx maven 插件来完成。
或者,如果您想要安装程序,请使用 jpackage,它也可以(以及其他方法)使用 maven 创建,请参阅JPackageScriptFX作为示例。
jpackage 不创建 archlinux 原生包。所以如果你想要那个,那么 jpackage 就不会被使用。相反,您可以使用 maven 程序集或 tar 调用来创建 jlink 输出的 zip 或 tar.gz,或者使用 pacman 工具创建相同的原生 archlinux 包。
或者,如果您喜欢 gradle,请查看badass jlink 和运行时插件。
使用构建工具(maven 或 gradle)包含 JavaFX 依赖项而不是依赖 JavaFX sdk 下载是首选 IMO。此外,如果可能,定义一个模块信息。然后 jlink 可用于从您的应用程序创建所需的运行时,它的依赖项和 jre,以及应用程序的执行脚本,从而使事情是自包含的。由 jpackage 创建的 rpm 或 deb 格式的本机包更进一步。安装以这种方式打包的应用程序还可以确保所有必需的操作系统库依赖项都是正确的。
如果您想了解更多信息,请参阅此答案中的上下文信息(FAQ 部分):