如何从 Java Web Start (JDK 8) 升级到 jlink (JDK 9+) 以用于自动更新应用程序?

2022-08-31 22:38:16

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

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

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

人们会认为Java Web Start可以继续使用,特别是如果一个人不经意地阅读本文档。请注意,Java Web Start 继续被突出显示。但有一个美中不足之处:Oracle正在弃用Java Web Start。它计划在JDK 11中删除。那么,官方的前进道路是什么。如果做不到这一点,人们有没有一种标准的方式?

就本问题而言,以下情况超出了范围

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

答案 1

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

现在(2019年10月)是时候认真考虑OpenWebStart了。虽然功能尚未完成,但OpenWebStart的alpha测试版现在可以通过“GPL与Classpath例外”许可证下载

OpenWebStart Technical Details 页面指出:

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

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


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


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


答案 2

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

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

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

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

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


推荐