如何捆绑适用于 Mac/Windows 的 Java 应用程序?

我有一个Java.jar应用程序,我想将其分发给Mac或Windows上的客户端。我想使用一个工具,它分别在Mac和Windows的.dmg和.exe包装器中,该工具在运行时执行此操作:

  1. 检查是否安装了 JRE;如果没有,它将从Oracle安装JRE6。否则,它会将已安装的 JRE 更新到最新的 1.6.x 版本。
  2. 在“开始”菜单(在 Windows 中)或“应用程序”文件夹(在 MacOSX 中)中创建指向我的包装应用程序的快捷方式链接,并允许我的应用程序使用上述 JRE 运行
  3. 支持Windows的简单“卸载应用程序”。对于Mac,只需将.app拖到“废纸篓”即可删除。

可选功能:

  1. 支持独立于平台的应用图标
  2. 支持自动更新 jar
  3. 在运行我的.jar时支持对 JRE 的参数
  4. Linux 支持(.deb或.rpm)

答案 1

查看适用于 Mac 的程序包制作器和适用于 Windows 的高级安装程序

我已经将它们用于您列出的几乎所有要求。

我没有将它们用于自动更新,但你可能必须将该逻辑构建到你的应用中。

不过,不要指望他们能为你做所有的工作。

预计会花费相当多的时间为每个平台构建安装程序。

我相信Windows和Linux有很多选择。高级安装程序恰好是我使用过的唯一一个。

我相信 Package Maker 是 Mac 的标准。它非常棒且易于使用。

祝你好运!


答案 2

为了在Windows上部署,我喜欢使用Launch4j来包装我的应用程序jar并创建一个本机Windows可执行文件,该可执行文件可以检测和使用已安装的JRE,或者允许您捆绑自己的JRE。它快速,轻量级,并且易于使用Ant(或Maven)编写脚本作为构建过程的一部分。

与此相结合,我通常使用NSIS创建一个安装程序,该安装程序具有快捷方式,并允许从控制面板安装/卸载/修复。通过一些工作,这也可以通过Ant编写脚本,也可以从Linux平台构建。

这些解决方案显然不适用于Mac部署,但我怀疑,如果您想为最终用户提供最佳体验,则必须为不同的平台使用不同的工具。