8

我想知道是否有可能有一个 Java 桌面应用程序,在启动时,查看一些 URL,看看它是否需要更新,如果需要,下载必要的 JAR 文件,并将它们添加到正在运行的程序的类路径中。

如果旧 jars 在那里,它们不应该被加载到类加载器中,此时应该是吗?是否可以在加载它们而不重新启动应用程序之前将它们换掉?

4

5 回答 5

11

JNLPJava Web Start)将为您完成所有这些工作

于 2009-11-18T20:11:20.183 回答
3

这应该是可能的。URLClassLoader是一个开始的地方。

于 2009-11-18T20:12:27.637 回答
1

这是可能的,但容易出错。

一种更简洁的方法是使用不依赖任何可更新 JAR 的“启动器”应用程序执行上述操作,然后启动实际应用程序。

您可能想查看此问题以获取有关此主题的更多详细信息。

于 2009-11-18T20:10:34.563 回答
1

Java Web Start 可能是您最好的选择。所需的 jar 文件应在描述符中标识,以便您管理版本控制。

如果您有一个需要在运行时动态发现和下载类的动态应用程序,那么您可以查看使用 RMI 进行动态代码下载

于 2009-11-18T21:33:35.190 回答
1

Java Web Start 是一个不错的选择,但有一些怪癖。尤其:

  • 必须在程序启动之前下载更新的代码。更现代的方法是下载更新并在下次启动时应用它们。
  • 默认位于沙箱内。如果您需要超出此范围,则必须对代码进行签名,这在您自动化部署过程之前相当麻烦(或使用 Netbeans,这很有帮助)。
  • 问题不容易调试 - 只有工具在 Java 控制台中启用完整跟踪。
  • 在客户端缓存 jar 很容易出错。更新时,请确保每个部署组件的 URL 都是唯一的,这样就不会使用缓存。

但是它工作时,它工作得很好。据我所知,让给定 Java 应用程序轻松更新集中版本是最简单的方法。

--
编辑:最新的 Java 6 中似乎存在“启动程序并透明地下载更新(如果可用)”功能。我还没有尝试过,但很快就会尝试。

于 2009-11-18T21:34:15.617 回答