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

Posted

技术标签:

【中文标题】如何为 Mac/Windows 捆绑 Java 应用程序?【英文标题】:How to bundle Java application for Mac/Windows? 【发布时间】:2012-05-29 13:15:57 【问题描述】:

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

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

可选功能:

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

【问题讨论】:

我觉得 Package Maker 和 Advanced Installer 可以满足您的所有要求。我认为您不会找到一种适用于 Windows 和 Mac 的工具。你可能需要一些单独的包管理。如果您告诉我们 Package Maker、Advanced Installer 或您尝试过的任何方法未满足您的哪些要求,我们可能会提供帮助。 请注意,jre 1.6 仅作为 Apple 的下载和软件更新提供。 1.7 可从 Oracle 获得。 不知道你的预算是多少,不过看看:Flexera Software's InstallAnywhere 【参考方案1】:

查看Package Maker for Mac 和Advanced Installer for Windows。

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

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

不过,不要指望他们会为您完成所有工作。

预计会花费大量时间为每个平台构建安装程序。

我确信 Windows 和 Linux 有很多选择。 Advanced Installer 恰好是我唯一使用过的。

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

祝你好运!

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

我已经对此进行了一段时间的研究,以便可以在 Linux 和 Windows 中安装该应用程序。我发现的最佳替代品是 -

Izpack

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

【讨论】:

【参考方案4】:

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

事实上,它是一个 netbeans 应用程序对应用程序的外观和感觉几乎没有影响,您仍然可以让它的行为与任何独立的 Swing 应用程序几乎相同。

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

【讨论】:

【参考方案5】:

已经有一些很好的答案,但我想JavaWebStart 需要提及。 当然,它只适合web部署,但安装后你的应用也可能离线运行。

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

需要考虑的事项:

您的应用程序需要经过签名才能像“普通”应用程序一样拥有访问权限。 afaik 除了通过网络下载之外,您不能以任何其他方式发送您的应用程序。

【讨论】:

【参考方案6】:

Java 运行时环境 (JRE) 自 JDK 11 起已不复存在。

JDK 11 Release Notes 状态 -

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

u/0x256 on Reddit has a great comment关于这个问题:

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

您可以使用jlink(JDK 附带)来分发 Java 应用程序。它将为您构建一个专用的 JRE。您不需要在客户端计算机上安装 java。

oracle blog article 提到 -

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

【讨论】:

以上是关于如何为 Mac/Windows 捆绑 Java 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Gemfile 指定最低捆绑器版本?

Wix Bootstrapper 捆绑包如何为 bal:Condition 指定 NOT 条件

如何为带有应嵌入视图控制器的句子的文本文件制作 iOS Swift“应用内购买”托管内容 pkg 文件?

如何为同一产品生成相同的条形码,如果产品不同,则应创建新的条形码[关闭]

如何为 searchkick gem 设置不同的端口?

如何为vim设置合成?