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

时间:2012-05-23 01:28:57

标签: java windows macos installer software-distribution

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

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

    1. 支持与平台无关的应用图标
    2. 支持jar的自动更新
    3. 运行我的.jar
    4. 时支持JRE的参数
    5. Linux支持(.deb或.rpm)

6 个答案:

答案 0 :(得分:9)

查看适用于Mac的Package Maker和适用于Windows的Advanced Installer

我已将它们用于您列出的每个要求。

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

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

期望花费大量时间为每个平台构建安装程序。

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

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

祝你好运!

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

我已经研究了一段时间,以便我可以在Linux和Windows中安装该应用程序。我找到的最佳选择是 -

您可以在blogpost中找到有关如何使用原生信息的信息。但是在Linux中安装它让我使用.sh脚本。至于我,我的知识是有限的。希望这会有所帮助。

答案 3 :(得分:1)

请注意,如果您将应用程序开发为netbeans平台应用程序,那么netbeans将为您生成跨平台安装程序(包括mac)。

它的netbeans应用程序对应用程序的外观和感觉几乎没有影响,你仍然可以使它的行为与任何独立的swing应用程序几乎相同。

这具有以下优点,我认为这是一个引人注目的选择:   - 跨平台  - 免费   - 在运行安装程序之前不需要安装JDK   - 集成软件更新过程

答案 4 :(得分:1)

已经有一些很好的答案,但我想{}需要提及JavaWebStart。 当然,它仅适用于Web deploment,但安装后您的应用程序也可以脱机运行。

可以使用功能(自动更新,JVM版本检查,桌面图标)。

需要考虑的事项:

  • 您的应用程序需要被刻录为拥有像“普通”应用程序一样的访问权限。
  • afaik除了网络下载外,您无法以任何其他方式发送您的应用程序。

答案 5 :(得分:0)

Java运行时环境(JRE)自JDK 11起就消失了。

JDK 11 Release Notes状态-

  

在此版本中,不再提供JRE或Server JRE。只有   提供了JDK。用户可以使用jlink创建较小的自定义运行时。

Reddit has a nice comment关于此问题。

  

不再有单独的JRE,只有包含所有JRE的JDK   部分(例如Java二进制文件)。 此外,除非您使用OracleJDK,否则请不要使用   打算付钱给他们。 OpenJDK是新的默认设置。

您可以使用jlink(JDK随附)来分发Java Apps。它将为您构建一个专用的JRE。您无需在客户端计算机上安装Java。

一个oracle blog article提到-

  

使用JDK 9随附的“ jlink”工具将使其变得更加容易   供应用程序开发人员打包和部署专用运行时   而不是依赖预先安装的系统JRE。