自我更新计划

A_E*_*ric 7 java auto-update

所以,这是我现在已经有一段时间了.你怎么能拿一个程序,并让它'自动更新'.所以我们假设一个外壳检查Myserver.com/myProg/updates.xml(或其他一些资源)并检查以确保版本号相同.一旦我这样做,我该如何处理更新程序?

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

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

如何在运行时将此更改置于适当位置?

注意:由于我无需扩展的签名问题,JNLP不适用于此.

Aug*_*sto 9

你需要2个"应用程序":

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

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

如果要在运行时进行自动更新,则需要将OSGI用作javabeats.但是如果你真的需要这个,那就走这条路.我从来没有使用OSGI,但我可以想象它是非平凡的.

编辑

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

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

对不起,我不能在没有自己编写代码的情况下给你一个更详细的答案,但是我要收费:).

  • 您还可以使用ProcessBuilder启动新的OS进程,然后让bootstrap应用程序正常退出.http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html (2认同)