0
  1. 检查服务器以获取包含更新的目录。
  2. 将 jar 下载到当前应用程序目录。
  3. 通知用户重新启动应用程序。

我关心的是在 java 应用程序运行时覆盖旧文件。

例如 myapp.jar 和其他库 jar 已更新,需要通过将新版本下载到当前应用程序目录并在此过程中覆盖它来替换。有没有办法做到这一点?它允许覆盖吗?

4

2 回答 2

2

有没有办法做到这一点?

我希望这样。但让它发挥作用是你的工作。严肃地说,共识是你在重新发明轮子。

它允许覆盖吗?

您不能依赖能够覆盖正在使用的 JAR 文件,因为您当前正在执行它。

您可以通过多种方式 (*) 解决此问题,但归结为使用某种自定义启动器来处理下载、更新等……然后启动或重新启动您的真实应用程序。而且,基本上,这就是 JNLP 所做的……因此,您提出要重新发明轮子的观察结果。

(* 我要补充一点,这些方法对我来说非常明显。如果它们对你来说并不明显,这就是你最好只使用 JNLP 的另一个原因。否则你可能会得到一个方形轮子。)

于 2011-12-03T05:58:51.663 回答
1

您不能指望能够覆盖 jar 文件。它可能会在 Linux 上运行,但绝对不能在 Windows 上运行。

解决此问题的一种方法是将 jar 下载到临时位置,然后在您启动时(在 JVM 启动之前)将临时 jar 移动到应用程序下载位置,然后启动。注意:您需要在下载后以某种方式验证 jar 的内容,以确保它们没有损坏。一个 md5sum 将工作。

于 2011-12-03T05:39:26.237 回答