【问题标题】:Auto update java application自动更新 java 应用程序
【发布时间】:2013-04-16 03:53:49
【问题描述】:

我正在构建可以从网上免费下载的 Java 应用程序。我想在修复错误或增强应用程序的情况下添加自动更新功能。对于自动更新,我将程序分成 3 个单元。

  1. 基础 - 非常小的代码,将检查第二个单元的新版本(上传器)更新并运行它
  2. 上传者将检查项目的新更新并下载任何更新并运行它
  3. 主程序 - 这包含主应用程序并包含所有模块。

我这样做有两个原因:

  1. 我不希望客户端在有任何更新时重新启动应用程序
  2. 由于应用程序还是新应用程序,我不希望出现用户无法运行或更新应用程序的任何问题,因此 Base 非常小,几乎没有错误。

是否有通用的 Java 方法/第三方来进行自动更新?

【问题讨论】:

    标签: java deployment auto-update


    【解决方案1】:

    Java Web Start (JWS) 是 Oracle Corporation 的技术,用于直接从网络或 Internet 链接启动富客户端(Swing、AWT、SWT)桌面应用程序。它为支持 Java 的平台提供“一键式”安装。

    JWS 提供了许多吸引人的功能,包括但不限于启动画面、桌面集成、文件关联、自动更新(包括延迟下载和以编程方式控制更新), 按平台、架构或 Java 版本划分本地和其他资源下载,配置运行时环境(最低 J2SE 版本、运行时选项、RAM 等),使用扩展轻松管理公共资源..

    【讨论】:

    • 实际上 Web Star 并没有帮助,因为我的 java 应用程序有一个安装程序,需要许多其他文件和依赖项
    • “需要许多其他文件和依赖项” 该语句中的任何内容都不会排除 JWS。如果可以在 Jar 中提供它们,只需将 Jar 添加到运行时类路径即可。但是,如果需要进行额外的设置/下拉(例如,将文件解压到特定位置),请用 Java 对其进行编码并从 ExtensionInstallerService 调用它。
    • 好吧,出于多种原因,我需要我的程序来检查更新,因为并非我在应用程序中使用的所有文件都需要上传。在某些情况下更新我需要删除客户端机器中的一些文件,还有很多其他的,所以我认为应该是通过代码
    • 恩德鲁谢谢,我会仔细阅读链接,谢谢您的帮助
    • Java Web Start 需要客户端机器安装 Java,有时我们需要将 JRE 与应用程序捆绑在一起,这样用户就不必自己动手了。
    【解决方案2】:

    您可以尝试使用 OSGi。

    如果您将适当地规划应用程序的模块化结构,那么当您更新应用程序模块时,您可能不必重新启动应用程序。您只需要重新启动模块,这将取决于更新的模块。重置依赖模块将在应用程序内进行,无需重新启动应用程序。

    我更喜欢使用 Felix OSGI 应用程序。

    Apache Felix

    【讨论】:

      【解决方案3】:

      虽然 Java Webstart 正是解决 OP 问题的技术,但同时 Oracle 从其 Java 版本中删除了 Webstart。

      幸运的是,Open Webstart 弥补了这一差距:

      Java Web Start (JWS) 在 Java 9 中已被弃用,从 Java 11 开始,Oracle 从其 JDK 发行版中删除了 JWS。这意味着安装了最新版本 Java 的客户端不能再使用基于 JWS 的应用程序。由于对 Java 8 的公开支持已于 2019 年第二季度结束,因此公司不再获得 Java Web Start 的任何更新和安全修复程序。

      这就是我们决定创建 OpenWebStart 的原因,它是 Java Web Start 技术的开源重新实现。我们的替代品提供了 Java Web Start 和 JNLP 标准最常用的功能,因此您的客户可以继续使用基于 Java Web Start 和 JNLP 的应用程序,而无需进行任何更改。

      【讨论】: