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

Hen*_*her 48 java deployment java-web-start jlink java-9

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年代的.
  • 将整个应用程序移植为webapp,重写UI和客户端逻辑以适应浏览器并处理所需的所有不兼容性.该应用程序的作者致力于GWT并确切知道Web浏览器的功能.不幸的是,他们也知道所需的努力程度.
  • 允许用户继续运行旧版本的应用程序.这也是1980年代的事情.现代应用程序可以快速更新,并且支持所发布的每个应用程序版本都不可行.这就是我父亲的COBOL应用程序必须处理的事情,他并不喜欢它.我希望技术进步.
  • 继续使用Java Web Start.除非Oracle改变主意,否则Java Web Start是一种注定要失败的技术.

小智 1

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

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

但据我了解这个问题,Java 不再像这样安装在客户端,我们不希望所有客户都出现问题。

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

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