我编写了一个 Java 应用程序,我想为主要操作系统打包,以便我可以将它作为一个独立的可安装映像提供。为此,我使用 jpackage,并借助我遇到的最有名的插件 The Badass Runtime Plugin ( https://badass-runtime-plugin.beryx.org )
我的问题是,尽管打包有效,但与已编译的 Java 相比,打包的应用程序的性能很糟糕。
当我在 MacOS 上构建我的应用程序(我为此使用 gradle)时,构建输出包括一个包含已编译类和启动脚本的安装目录,以及一个包含应用程序文件的 dmg 的安装程序目录。
通过启动脚本从编译的类运行应用程序效果很好。从应用程序运行应用程序(从 dmg 安装后)非常慢 - 通常是 10 倍甚至更糟。
已编译类的启动脚本指向我的本地 JDK 实例 (openjdk 16),而应用程序文件包含应用程序运行所需的 jdk 模块。这当然是设计使然,但我能想到的两者之间的唯一区别。
感谢您阅读本文 - 我意识到这是一个相当小众的问题。如果有人有任何可能有帮助的经验或想法,我很乐意听到。
谢谢,安迪
编辑 9 月 10 日 - 感谢迄今为止所有的兴趣和评论。关于我的应用程序的更多注释可能相关:
它是 RocksDB 的重度用户,用于堆外、文件支持的数据存储。编译后的 Java 和打包的 app 都使用相同的 sst 文件,所以数据是相同的。应用程序和数据在同一台机器上运行/存在,一台带有 SSD 驱动器和充足容量的 MacBook Pro。
它启动 Javalin 实例来为基于浏览器的 UI 启动 https 连接并接受数据请求。