ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

JWM发布打包指南:GraalVM Native Image与jPackage双路线实战,告别笨重JAR

JWM发布打包指南:GraalVM Native Image与jPackage双路线实战,告别笨重JAR JWM发布打包指南GraalVM Native Image与jPackage双路线实战告别笨重JAR【免费下载链接】JWMCross-platform window management and OS integration library for Java项目地址: https://gitcode.com/gh_mirrors/jwm/JWMJWM 是一个跨平台的 Java 窗口管理与操作系统集成库支持 Windows、macOS 和 X11Wayland 在规划中口号是「Electron for JVM, without Chrome and JS」。本文带你用GraalVM Native Image和jpackage两条打包路线把基于 JWM 的 Java 桌面应用发布成无需安装 JVM 的原生可执行文件或系统级安装包彻底告别又慢又笨重的 fat JAR。为什么需要发布打包JAR 交付的三个痛点用户必须装 JDK运行java -jar之前对方机器得先有一套匹配的 Java 运行环境启动慢JVM 解释执行 类加载冷启动明显比原生程序慢分发体验差一个几 MB 起步的 JAR 加一堆依赖说明远不如一个双击就能装的.msi/.deb体面。JWM 官方仓库提供了两条现成的打包参考路线分别对应「原生可执行文件」和「系统安装包」两种交付形态路线 AGraalVM Native Image路线 Bjpackage输出产物单个平台原生可执行文件.exe/ ELF系统级安装包.msi/.deb等是否需要用户装 JVM❌ 不需要❌ 不需要安装时自带精简 JRE启动速度毫秒级最快常规 JVM 启动速度参考示例examples/empty-native/examples/native-image/一句话选型追求极致启动速度选 Native Image面向终端用户正式分发、要安装程序体验选 jpackage。打包前置条件环境与依赖怎么配两条路线的环境要求并不相同先对照确认路线必备环境GraalVM Native ImageGraalVM JDK 25JAVA_HOME指向其安装目录、当前平台的 C 编译器jpackageJDK 14jpackage 已内置 构建工具sbt 或 Gradle仓库自带的examples/native-image/示例同时覆盖了 sbt 与 jpackage 两种构建方式。拿到代码git clone https://gitcode.com/gh_mirrors/jwm/JWM路线AGraalVM Native Image 生成原生可执行文件项目examples/empty-native/基于 Gradle 与 GraalVM 官方 native-build-tools 插件org.graalvm.buildtools.native流程分三步。第1步用 Native Image Agent 收集元数据Java 大量依赖反射和动态加载静态编译前必须先让「代理程序」记录运行时用到的类与字段。先以代理模式把应用跑一遍并完整操作界面gradle run -Pagent元数据会写入build/native/agent-output/runbuild.gradle中configurationFileDirectories会指向该目录。第2步执行 Native Image 编译gradle nativeCompile产物在build/native/nativeCompile/直接运行即可全程无需安装任何 Java./build/native/nativeCompile/empty-nativeWindows 下为build\native\nativeCompile\empty-native.exe。第3步理解关键构建参数examples/empty-native/build.gradle中有几个值得注意的配置fallback false禁止在元数据不全时悄悄退回 JVM 模式保证产物真是原生的buildArgs.add(--enable-native-accessALL-UNNAMED)JWM/Skija 依赖 JNI 直接调用本地库必须放开-marchcompatibility生成兼容性更好的机器码避免用户 CPU 指令集差异导致崩溃。 老 sbt 用户也可参考examples/native-image/build.sbt它显式传入-H:ReflectionConfigurationFiles、-H:JNI、--no-fallback等参数本质与上面完全一致。路线Bjpackage 一键打出系统级安装包正式产品分发通常还需要安装程序、开始菜单快捷方式、桌面图标这些「原生体验」。examples/native-image/内置了packageApp任务按当前系统自动分派Windows走sbt-native-packager的 Windows 插件执行Windows / packageBin生成 MSI 安装程序见Pack.scala与build.sbt中wixProductId配置Linux直接调用jpackage --type deb打包成.deb见Pack.scala的packageLinuxAppCmd注意它要求-i目录里先放好 fat jar 与--main-jar。执行sbt packageApp安装包会保存在target/windowsWindows或target/linuxLinux目录。jpackage 与图标让安装包看起来像原生应用同一个 sbt 工程里还内置了genIconIfNotExists任务macOS 上调用iconutil把 PNG 图集转成macos.icnsWindows 上把 16~256px 的 PNG 合并成windows.ico保证安装器和窗口标题栏图标都正确显示。发布流水线从 JAR 到发布包如果你要像官方一样「发布 JWM 库本身」脚本都在script/目录script/package.py构建后依次产出jwm-版本.jar、-sources.jar、-javadoc.jar并从deploy/META-INF/maven/io.github.humbleui/jwm/复制 Maven 坐标文件script/release.py汇总各平台 JAR、生成 release notes、打jwm.zip并推送发布。依赖坐标为io.github.humbleui:jwm在 Maven 仓库中按版本号拉取即可。常见问题打包翻车点与调试技巧Native Image 首次编译很慢正常现象静态分析整个类路径需要几分钟属一次性成本。运行原生程序时报错/功能缺失多半是 agent 元数据没收集全。重新执行gradle run -Pagent确保这次手动操作覆盖了应用的所有功能路径每个按钮、每条分支都点一遍。Windows 二进制在别的机器打不开Native Image 产物与平台强绑定发布哪个平台就在哪个平台编译Linux 上编译不出能跑在 Windows 的 exe。想要更多日志设置环境变量JWM_VERBOSEtrue再启动应用JWM 会输出更详细的调试信息README「Debugging」一节。macOS 细节build.sbt中已为 macOS 加上了-XstartOnFirstThread这是 Cocoa 主线程模型的要求自己写工程时别漏。更多细节可直接阅读Getting Started、examples/native-image/README.md、examples/empty-native/README.md。小结追求零 JVM、毫秒启动examples/empty-native/三步走——agent 收集 →nativeCompile→ 拿到原生可执行文件追求正式分发体验examples/native-image/的sbt packageAppWindows 出 MSI、Linux 出 deb图标与安装器一步到位发布 JWM 库本身script/package.py与script/release.py已把整条流水线封装好。两条路线配合使用JWM 应用从开发到用户手里全程无需解释「请先安装 Java」这一句。【免费下载链接】JWMCross-platform window management and OS integration library for Java项目地址: https://gitcode.com/gh_mirrors/jwm/JWM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表