48

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 是一种注定失败的技术。
4

3 回答 3

2

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

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

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

OpenWebStart 基于 Iced-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)或项目发起人没有任何关系。这不是建议。

于 2019-10-13T05:39:32.730 回答
1

你用maven吗?

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

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

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

<version>[1.0.0,)</version>

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

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

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

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

专业版

  • 此模式可用于许多不同的项目。

控制

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

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

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

于 2019-08-22T08:44:29.590 回答
1

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

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

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

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

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

于 2019-08-15T15:02:29.210 回答