macOS应用程序结构
macOS通常以dmg或pkg作为软件发行包,安装到/Applications下后,结构比较统一。
info.plist里的CFBundleExecutable字段可以指定入口,如果不指定,则MacOS下必须存在同名可执行文件。即abc.app下必须存在abc.app/MacOS/abc文件。
极简结构如下:
Java应用打包
工具有几个:JDK自带的javapackager,之前的还有JavaAppLauncher等。最新的JDK提供jpackager打包工具。
JavaAppLauncher
先看一个打包后的结构:
注意,这个JavaAppLauncher来自于JDK(src/macosx/bundle/JavaAppLauncher/src/JavaAppLauncher.m)。所以上面包把JDK也一起打进去了。其它第三方工具如jar2app也是利用了这个JavaAppLauncher程序。
jpackage
JDK模块化后,对打包是有帮助的。可以只打包部分JRE组件:
## 先创建一个smalljre
jlink --add-modules java.base,java.desktop,java.sql --output smalljre
## 再创建安装包
jpackage --name myapp -t app-image --input . --main-jar javaui.jar --main-class com.icool.ui.MainWindow --runtime-image smalljre
打包完后的结构如下:
其中myapp是一个可执行文件。
其它相关JDK命令
查看class版本:javap -verbose 文件名.class
查看modules: java --list-modules
链接
- jpackage
- jar2app