【问题标题】:How do I upgrade to jlink (JDK 9+) from Java Web Start (JDK 8) for an auto-updating application?如何从 Java Web Start (JDK 8) 升级到 jlink (JDK 9+) 以实现自动更新应用程序?
【发布时间】:2019-03-07 18:17:20
【问题描述】:

Java 8 和之前的版本有Java Web Start,当我们更改应用程序时它会自动更新它。 Oracle 建议用户迁移到jlink,因为这是新的 Oracle 技术。到目前为止,这听起来不错。这带来了许多好处:

  1. Windows、Mac 和 Linux 上的本机代码
  2. 代码模块化(虽然 Proguard 也这样做)
  3. 使用受支持的新技术。

问题:我找不到使用 jlink 自动更新的规范 Java 解决方案。

人们会认为 Java Web Start 可以继续使用,尤其是如果随便阅读this document。请注意,Java Web Start 继续在显着位置列出。但是有一个fly in the ointment:Oracle 正在弃用 Java Web Start。在 JDK 11 中删除它是 slated。那么,官方的前进道路是什么。如果做不到这一点,人们是否有一种标准的方式进行?

就本问题而言,以下内容超出范围

  • 每年向拥有功能丰富的企业解决方案的人支付巨额费用。要分发的应用程序已经打包到一个小于 50MB 的 jar 中。
  • 强制用户运行 InstallShield 风格的应用程序重新安装新版本,然后在每次推送更新时手动卸载旧版本。那太像 1990 年代了。
  • 将整个应用程序移植为 Web 应用程序,重写 UI 和客户端逻辑以适应浏览器并处理所有不兼容的问题。该应用程序的作者在GWT 上工作,并且确切地知道网络浏览器的功能。不幸的是,他们也知道所需的努力程度。
  • 允许用户继续运行旧版本的应用程序。那也是1980年代。现代应用程序更新迅速,并且支持曾经发布的应用程序的每个版本是站不住脚的。这就是我父亲的 COBOL 应用程序必须处理的问题,他并不喜欢它。我希望技术有所进步。
  • 继续使用 Java Web Start。直到/除非 Oracle 改变主意,Java Web Start 是一种注定失败的技术。

【问题讨论】:

  • 它不仅“计划在 JDK 11 中删除”,它has been removed already(因为 JDK 11 已经发布一周了)。据我所知,jlink 允许您创建用于部署的自包含运行时映像,但它不提供部署本身,更不用说自动更新功能。这只是一项服务,Oracle 不再提供(不再提供)。
  • 甲骨文可能不再提供这项服务,但这并不妨碍任何人/任何其他人做同样的事情......
  • 也许你想试试 Getdown github.com/threerings/getdown。使用 Getdown,您实际上甚至可以将您需要的 JRE 与您的应用程序捆绑并更新,而无需依赖已安装的客户端 JRE。
  • 没有 JRE 的用户?他们如何运行网络启动应用程序?使用 getdown,您可以将 JRE 与您的实际应用程序一起发布。无需在本地安装任何东西。但是,您需要为初始部署创建包含 JRE 的包。
  • medium.com/oracledevs/… 有一篇文章描述了这个过程,github.com/udaychandra/auto-updater-demo 有一个演示

标签: java deployment java-web-start java-9 jlink


【解决方案1】:

2019年5月评论观看OpenWebStart项目。

现在(2019 年 10 月)是时候认真考虑 OpenWebStart。虽然还不是feature complete,但OpenWebStart 的alpha beta 版本现在是available for download,在“GPL with Classpath exception”许可下。

OpenWebStart Technical Details 页面声明:

OpenWebStart 基于 Iced-Tea-Web 和 JSR-56 中定义的 JNLP 规范。它将实现 Java Web Start 最常用的功能,并且能够处理任何典型的基于 JWS 的应用程序。我们计划支持 Java 的所有未来版本,从 Java 11 开始。除了 Java 11,OpenWebStart 的第一个版本也将支持 Java 8。

该页面继续声明 OpenWebStart 将支持具有自动更新功能的交互式安装程序和非交互式安装程序。将支持一些 JNLP 功能,其中包括 Java 控制面板的替代品。 feature table 提供了更全面的计划功能列表1及其实施状态。


1 - 如果您的需求不在他们的功能列表中(例如 jlink 支持),您可以联系 OpenWebStart 团队,并提供合适的激励措施(例如支付开发人员的钱)来实现该功能你。他们还为付费客户提供商业版软件。


免责声明:我与 OpenWebStart 项目、公司 (Karakun) 或项目赞助商没有任何关系。这不是建议。

【讨论】:

    【解决方案2】:

    我在过去的项目中遇到过类似的问题。我们需要从 Webstart 迁移到另一种技术。

    第一种方法是安装IcedTea。它直接与 AdoptOpenJDK 项目捆绑在一起。

    但据我了解,Java 不应该再像这样安装在客户端,我们不希望所有客户都遇到问题。

    然后我们的解决方案是构建一个自己的特定可执行文件,它连接到服务器,从服务器端请求环境设置,然后下载并提取 JLink Java。所以我们可以使用旧技术并将其包装在一个可执行文件中。

    最后一件事是在调用 jnlp-URL 时重定向到可执行文件的下载位置。

    【讨论】:

    • 你用什么来构建可执行文件? jlink 和一组机器,每个操作系统一个?还是有什么不同?
    【解决方案3】:

    你使用maven吗?

    我已经用 maven 解决了我的类似问题(我需要更新 EAR)。

    我的主应用程序(ear 包)有一个 pom.xml,其中列出了依赖项和存储库。

    依赖项具有<version> 标记和范围(documentation),如本例所示

    <version>[1.0.0,)</version>
    

    这意味着:获取版本 1.0.0 或更新的依赖项。 (你也可以给版本设置一个上限,[1.0.0, 2.0.0),所以如果你开发一个新版本,它不会在旧应用中使用)

    在存储库部分,我添加了我的个人存储库。

    现在,在远程机器上,我只需要使用 maven 重建我的 ear 包:编译器下载我的 jar 的较新版本并将其放在一起。

    您需要一个系统来检查是否有更新的依赖项版本,并警告用户更新应用程序并锁定其工作(如果不更新,您将无法工作)。也许您需要一个小应用程序来让用户轻松完成重建过程。现在是 1990 年代,但很多桌面应用程序都以这种方式工作

    专业版

    • 此架构可用于许多不同的项目。

    控制

    • 您需要在远程机器上构建应用程序,因此客户端必须具有 JDK 并可以访问您的存储库(如工件);

    • 您必须在不同的 jar 中编写代码,并将它们像依赖项一样添加到主存档中。

    • 您必须每次更改 JAR 版本并在存储库上发布(这可能是一个好习惯)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-06
      • 2020-06-17
      • 2017-08-04
      • 1970-01-01
      • 2013-01-13
      • 2018-03-06
      • 2017-10-31
      • 2023-03-18
      相关资源
      最近更新 更多