【问题标题】:Alternatives to Java Web Start? [closed]Java Web Start 的替代品? [关闭]
【发布时间】:2011-08-18 14:13:57
【问题描述】:

我们在生产环境中遇到了 Java Web Start 的巨大问题。我们害怕发布,因为每次发布时,帮助台都会接到 1/3 用户的电话,并收到 “无法启动” 错误。很难判断是因为用户错误、下载过程中取消、网络连接不佳还是其他原因。但底线是:

我们发现它非常不可靠。

部署和更新丰富的 Swing 应用程序有哪些替代方法?无论是免费的还是商业的,我对功能和稳健性更感兴趣。

可靠性是关键,但我还希望有以下几点:

  • 安装一次,从 JWS 等简单的 HTTP 主机自动更新
  • 差异更新
  • 支持多种配置(想想 30 个实例,它们可能具有不同版本的应用程序或不同的启动参数 - 最好不要每次都构建 30 个工件)
  • Win / Mac / Linux 支持。希望这并不意味着我必须为每个实例维护 3 个构建。

【问题讨论】:

    标签: java auto-update java-web-start


    【解决方案1】:

    我感觉到你的痛苦,我在 JWS 上遇到的最大问题是可见性,即它在做什么以及为什么要这样做。我们的大部分问题都与内部代理有关(Java 似乎真的不喜欢对代理进行身份验证),而目前这些问题似乎已经解决了。尽管如此,我确实考虑过简单地写一个替代品。这并不像听起来那么疯狂,JWS 做了很多我并不真正关心的事情,即与 Web 浏览器集成并检查 JVM 版本。考虑以下场景:

    1. 您启动了一个 Java 应用程序(启动应用程序)。此应用程序采用单个参数,即 JNLP 文件的 URL。
    2. 启动应用程序对 URL 进行哈希处理,并将其用作本地文件夹(存储库)的基础,用于存储应用程序下载的任何 jar。如果存储库不存在,它将创建它。
    3. 启动应用程序尝试下载 URL 指向的 JNLP。如果无法下载,它将启动存储库中的任何内容(可能会警告用户)
    4. 如果它可以下载 JNLP,解析它并列出所有需要下载的 jar。如果您已经有了这些 jar,请使用 Apache HttpClient 之类的东西来确定服务器是否有更新的版本,并在需要时下载。重要的一点是任何下载都应存储在临时文件夹中。一旦 ALL 下载成功,您就可以将它们应用到本地存储库。理想情况下,您将备份已经存在的内容,以便进行某种回滚过程。

    这应该比常规 JNLP 提供一些非常显着的优势:

    1. 可见性,您可以准确记录正在发生的事情
    2. 更好的故障模式:如果下载被中断,只需启动已经存在的版本(显然,如果在第一次下载时发生中断,这将不起作用),如果你想告诉用户它然后这样做.
    3. 通过作为本地应用程序运行,您应该避免遇到 jar 签名问题,老实说,我不了解 Java Web Start 安全模型关于签名 jar 的问题,但似乎如果涉及不同的类加载器,JWS 会抱怨关于它(我认为)

    遗憾的是,我不能因为上述的工作版本而解雇你,我确实启动了一个原型但暂停了它。在这种情况下,我将来可能不得不返回它,我很乐意分享完成的版本。

    干杯, 菲尔

    【讨论】:

      【解决方案2】:

      目前我们正在使用GetDown 来处理我们的挥杆应用程序的分发。我们使用 Tomcat 分发更新并使用 GetDown 下载这些更新。它非常灵活和强大,并且比 java WebStart 好得多,而且因为它为更改生成校验和,所以它节省了带宽并下载了刚刚更改的文件。

      一个很好的教程:http://www.hascode.com/2012/05/creating-updatable-java-applications-using-getdown-and-the-getdown-maven-plugin/

      【讨论】:

        【解决方案3】:

        您可以使用安装程序:例如Install4j

        您可以在此处找到安装程序列表:What are good InstallAnywhere replacements for installing a Java EE application?

        【讨论】:

        • 但是Install4j是否会在每次启动应用程序时检查新版本,以防自动下载并安装新版本?
        • 请注意,Install4j 大部分不是免费的,它在支持“本地启动器生成”方面存在严重限制。我宁愿建议 IzPack、PackR 或 JNDT(我自己的工具),即使它们没有漂亮的 GUI。 @Jonas 是的,它允许创建自动更新程序。
        【解决方案4】:

        随着 Java Web Start 被 Oracle 弃用,我们正在考虑使用 Microsoft 的 .NET Click Once 下载并启动我们的 Java 应用程序。

        我们将让 Click Once .application 文件运行一个检测 Java 的小 MS 程序,下载我们最新的 jar 文件,然后使用检测到的 Java 版本和 Jar 文件启动我们的 Java 程序。

        当然,这只是针对 Windows 机器的解决方案,但我们的客户只在 Windows 上使用,所以它适用于那种环境。

        MS 的点击一次:https://docs.microsoft.com/en-us/visualstudio/deployment/clickonce-security-and-deployment

        【讨论】:

          【解决方案5】:

          您也可以尝试零安装。它是跨平台的(Linux、Win、Mac),提供 jrd 下载和自动更新,并具有良好的系统集成。

          在我看来它的缺点是不容易处理..

          http://0install.net/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-24
            • 2010-11-26
            • 2011-02-26
            • 2014-08-26
            • 2011-02-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多