为Java Swing应用程序添加自更新function的最佳方法是什么?

我正在试图找到一种方法来为我正在研究的Java / Swing应用程序添加自我更新function。

基本上我有一堆带有额外function的jar文件,当它们发生变化时可以重新部署到已安装的用户。 没有什么复杂的,只需检查是否已发布新版本,通过HTTP下载它们,然后可选择提供给用户重启应用程序。

我看了一下webstart,它可以工作。 但这个特殊的应用程序做了一些时髦的东西,类加载和GC内存设置看起来不像是通过webstart支持,或至少会使问题复杂化。 (这是JMeter的调整版本)

我也加入了这个插件处理程序http://swing-fx.blogspot.com/2008/06/add-auto-update-and-plugins-to-your.html ,但它非常alpha,并试图用你通常使用alpha的东西做太多的事情。

我做了完全相同的事情。 但这很久以前,所以今天可能有更好的工具。

我发现我需要的是装载机。 加载器主程序在类路径中没有app jar。 它首先根据需要下载了更新,然后在类路径中使用app jars创建了一个自定义类加载器,并调用了应用程序主类的main方法。 这不是很复杂。 IIRC我需要这样做,因为如果它们已经在类路径中,则不能在窗口中覆盖jar子。

希望这可以帮助。

6年前我们有一个自我更新的摇摆应用程序。 像你建议的那样,

1)它通过http下载了最新的jar子,
2)将它们复制到一个文件夹中。
3)由于使用.BAT文件启动swing应用程序,在用户说YES后,我们将关闭swing应用程序并查找更新文件夹中的任何文件。 如果是,则启动另一个.BAT文件以将新JAR复制到所需目录。
4)然后重新启动swing应用程序。

更新,插件,关注点分离等正是OSGi的意思 – 你可能想看看这个。 它不会自由(阅读:初始学习曲线陡峭,尤其是当你正在使用类加载技巧时)至少有很好的开源实现(felix – 请参阅felix.apache.org ,equinox – 请参阅www.eclipse。组织等)

对于这些实现,autoupdater可用 – 如果正确编写模块,则可以在运行时更新而无需重新启动。

我相信你应该再看看Java WebStart,或者至少详细说明你认为会导致问题的“时髦的类加载”(因为它可能也会导致这里提出的任何解决方案出现问题)。

IIRC,您可以使用Java WebStart( http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources )设置命令行参数。

我肯定会先试用Webstart。 即使是使用Webstart的早期Eclipse RCP应用程序,我们已经取得了很多成功,并且您可能无法获得比OSGI框架(Eclipse Equinox)更加时髦的类加载问题。

您是否可以在关于类加载方法的问题中提供更多细节?

关于GC和其他VM设置:这些很容易在Webstart用于启动应用程序的JNLP(Java网络启动协议)文件中指定。

Java Web Start是不错的选择。 GC的东西并不重要。 类加载可能是个问题。 但是当您受到用户信任时,您可以授予AllPermisions,您将能够进行自定义类加载。 也许用类加载来重新考虑时髦的东西会很好。 真的有必要吗? 或者看看NetBeans。 应该找到自动更新的灵感。