如何更新jpackage安装的应用程序?

问题描述 投票:0回答:2

我有一个 jpackage 创建的应用程序,它由单个应用程序 jar 文件和一些第三方依赖项组成。我使用 jpackage 创建适用于 Linux、macOS 和 Windows 的安装程序。一切正常。

但我不希望我的用户每次应用程序更改时都必须重新安装应用程序,因此我正在寻找一种方法让用户下载应用程序 jar 并替换安装程序中包含的应用程序 jar。

我认为最好的选择是将应用程序 jar 下载到 $HOME/application_name/ 目录中,并将已安装应用程序的 CLASSPATH 设置为以该目录开头,以便它在出现的 jar 之前找到新更新的 jar随着安装。这可能吗?如果是这样,怎么办?我在 jpackage 文档中找不到任何表明该功能存在的内容。或者,是否可以直接从应用程序内替换已安装的应用程序 jar?如果是的话,怎么办?

如果两者都不可行,还有其他方法吗?在关于同一件事的 2 岁以上问题中,唯一的答案建议使用 JWS 替代品“getdown”,但我不想走这条路,因为我会失去 jpackage 的其他好处。

java classpath jpackage
2个回答
0
投票

“不要修复未损坏的东西。” -伯特·兰斯

你有什么理由使用jpackage吗?因为您可以通过我为每个桌面应用程序使用的技术来充分利用它,JDeploy

jDeploy 是 Java 开发人员可以更轻松地将桌面应用程序作为本机捆绑包分发的工具。您可以使用 npm 或 GitHub 版本将应用程序发布到云,它提供了一个下载页面,其中包含下载适用于 Mac、Windows 和 Linux 的本机捆绑包的链接。有关 jDeploy 及其功能的更多信息,请参阅 jDeploy 网站。

他们的网站:

[https://www.jdeploy.com/][JDeploy site]

完全按照本文档的说明进行操作可以让您实现您的目标:

[https://www.jdeploy.com/docs/manual/][JDeploy developers guide]

如果您有任何疑问,请告诉我!


0
投票

jpackage 本身不直接支持就地更新 jpackage 应用程序。然而,你考虑更新它的方式是相当合理的,并且可以通过一点创造力来实现。以下是可能适合您的方法:

分步方法:

1。应用程序目录创建

  • 当您的应用程序第一次启动时,您可以检查$HOME/application_name/是否存在。如果没有,请创建它。

2。检查是否有较新的 JAR:

  • 每次应用程序启动时,在运行其主要功能之前,它应该在 $HOME/application_name/ 中查找更新的 JAR 文件。如果找到,它会从该 JAR 加载类,而不是原始捆绑的类。

3.更新机制:

  • 在您的应用程序中实现简单的更新机制:

    • 从服务器检查版本文件(可以像带有版本号的文本文件一样简单,也可以是带有元数据的更复杂的 JSON)。
    • 将该版本与应用程序的当前版本进行比较。 如果服务器版本较新,请将较新的 JAR 下载到 $HOME/application_name/。

4。设置类加载器:

  • 修改主类的加载机制以使用自定义类加载器,该加载器首先检查 $HOME/application_name/ 目录中的 JAR,如果未找到,则返回到捆绑的 JAR。

这是在代码中执行此操作的基本方法:

File jarUpdateFolder = new File(System.getProperty("user.home") + "/application_name/");
URL[] urls = {jarUpdateFolder.toURI().toURL()};
URLClassLoader loader = new URLClassLoader(urls);

Class<?> clazz = loader.loadClass("com.your.main.ClassName");
Method main = clazz.getDeclaredMethod("main", String[].class);
String[] args = {}; // or whatever args you need
main.invoke(null, (Object) args);

5。用户通知:

  • 您可以选择添加一个用户界面,在有更新时通知用户、显示下载进度等。这取决于您希望更新过程的用户友好性和无缝性。

6。后备机制:

  • 拥有后备机制也是明智之举,以防新 JAR 出现问题或无法启动。这样,即使更新出现问题,您的用户仍然可以使用该应用程序。

注意事项:

  • 安全性:确保您签署并验证您的 JAR,以便恶意用户无法用有害代码替换 JAR。

  • 权限:在某些系统上,您可能会遇到权限问题,特别是当您的应用程序需要提升权限时。确保应用程序具有下载和替换 JAR 文件所需的权限。

  • 备份:建议保留旧 JAR 的备份。如果新的 JAR 出现重大问题,用户可以回滚。

  • 日志记录和调试:保留全面的日志,尤其是在更新过程中。它将有助于调试更新过程中可能出现的问题。

  • 局限性:这种方法本质上绕过了 jpackage 来更新应用程序,因此您无法获得 jpackage 可能为此过程提供的任何固有好处。

虽然此方法涉及手动设置并且需要仔细考虑不同的边缘情况,但它为您提供了所需的灵活性,而无需等待 jpackage 提供此类功能。

© www.soinside.com 2019 - 2024. All rights reserved.