部署-如何从Java Web Start(JDK 8)升级到jlink(JDK 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年代。
  • 将整个应用程序移植为Web应用程序,重写UI和客户端逻辑以使其适合浏览器并处理所有不兼容问题。 该应用程序的作者在GWT上工作,并且确切了解Web浏览器的功能。 不幸的是,他们也知道所需的努力水平。
  • 允许用户继续运行旧版本的应用程序。 那也是1980年代。 现代应用程序更新很快,并且无法支持已发布的每个版本的应用程序。 那是我父亲的COBOL应用程序必须处理的,他对此并不满意。 我希望技术进步。
  • 继续使用Java Web Start。 除非/除非Oracle改变主意,否则Java Web Start是注定的技术。
3个解决方案
1 votes

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

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

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

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

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

Kikkirej answered 2020-02-22T00:24:49Z
1 votes

您使用Maven吗?

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

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

依赖项具有<version>标签,其范围(文档)如本例所示

<version>[1.0.0,)</version>

这意味着:获得1.0.0或更高版本的依赖关系。 (您还可以为版本[1.0.0,2.0.0]设置上限,因此,如果开发新版本,则该版本不会在旧应用中使用)

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

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

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

专业版

  • 此架构可以在许多不同的项目中使用。

反对

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

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

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

Daniele Licitra answered 2020-02-22T00:26:07Z
1 votes

在2019年5月发表评论观看了OpenWebStart项目。

现在(2019年10月)是时候认真考虑OpenWebStart了。 虽然尚未完成功能,但现在可以根据“具有Classpath异常的GPL”许可下载OpenWebStart的alpha beta版。

OpenWebStart技术详细信息页面指出:

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

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


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


免责声明:我与OpenWebStart项目,公司(Karakun)或项目发起人没有任何关系。 这不是建议。

Stephen C answered 2020-02-22T00:26:55Z
translate from https://stackoverflow.com:/questions/52611418/how-do-i-upgrade-to-jlink-jdk-9-from-java-web-start-jdk-8-for-an-auto-updat