7

所以,这是我一段时间以来一直在想的事情。您如何获取程序并使其“自动更新”。因此,假设一个外壳检查 Myserver.com/myProg/updates.xml(或其他一些资源)并检查以确保版本号相同。一旦我这样做了,我该如何处理更新程序?

假设我的程序是一个简单的主类,唯一的输出是:

System.out.println("Hello World"); 在更新它变成 System.out.println("Hello Java");

我怎样才能在运行时使这种变化到位?

注意:JNLP 不适用于此,因为我不想扩展的签名问题。

4

2 回答 2

9

您需要 2 个“应用程序”:

  1. 检查更新并运行主应用程序的最小引导应用程序;
  2. 主要应用。

用户总是启动引导应用程序,而不是主应用程序(实际上用户并不知道引导应用程序)。这是迄今为止我见过的最常见的模式。

如果你想在运行时进行自动更新,你需要使用 OSGI 作为 javabeats 提到的。但只有在你真的需要时才走这条路。我从未使用过 OSGI,但我可以想象它的重要性。

编辑

我没有具体的例子,但我可以想象

  1. 引导程序下载一些 jar 和配置文件
  2. 其中一个配置文件包含类路径中所需的文件(这可以由您的应用程序自动完成,如果它选择给定文件夹内的所有 jar 文件)。
  3. 使用前面的列表,创建一个新的类加载器(参见此处的示例)以将 jar 文件添加到类路径中。
  4. 在新的类加载器中运行应用程序的主类。

抱歉,如果不自己编写代码,我无法给你更详细的答案,但我会为此收费:)。

于 2012-11-12T19:06:43.833 回答
2

如果排除 JNLP,我认为只有使用OSGI的解决方案才能实现这一目标。否则,即使是最简单的设计,您也需要另一个程序来管理和下载当前程序的版本。

于 2012-11-12T19:03:56.197 回答