【问题标题】:Downloading JAR files at runtime in Java在 Java 运行时下载 JAR 文件
【发布时间】:2010-12-18 00:54:15
【问题描述】:

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

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

【问题讨论】:

    标签: java jar classpath auto-update


    【解决方案1】:

    【讨论】:

    • 这是我通常做的。我有一个通常是 jnlp 的应用程序,但在这个特定的场景中,我将从一个已经运行的 vm 启动这个应用程序,并在同一个 vm 中启动它。那部分正在工作。问题是启动通常是 jnlp 的应用程序的应用程序并不容易更新,它需要在其类路径中添加一些依赖 jar 来启动其他应用程序。 Jnlp 将解决所有这些问题,但单个 vm 要求是约束。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      有可能,但容易出错。

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

      您可能想查看this question 以了解有关此主题的更多详细信息。

      【讨论】:

        【解决方案4】:

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

        如果您有一个动态应用程序需要在运行时动态发现和下载类,那么您可以查看Dynamic code downloading using RMI

        【讨论】:

          【解决方案5】:

          Java Web Start 是一个不错的选择,但有一些怪癖。值得注意的是:

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

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

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

          【讨论】:

            猜你喜欢
            • 2012-03-12
            • 1970-01-01
            • 2012-02-05
            • 2021-11-19
            • 1970-01-01
            • 2019-03-18
            • 2017-05-21
            • 2012-10-20
            • 2018-02-23
            相关资源
            最近更新 更多