我正在试图找到一种方法来为我正在处理的Java / Swing应用程序添加自我更新功能。
基本上我有一堆带有额外功能的jar文件,可以在安装的用户更改时重新部署。没有什么复杂的,只需检查是否已发布新版本,通过HTTP下载它们,然后可选择提供给用户重启应用程序。
我看了一下webstart,它可以工作。但这个特殊的应用程序做了一些时髦的东西,类加载和GC内存设置看起来不像是通过webstart支持,或至少会使问题复杂化。 (这是JMeter的调整版本)
我也加入了这个插件处理程序http://swing-fx.blogspot.com/2008/06/add-auto-update-and-plugins-to-your.html的道路,但它是非常alpha的,并试图用你通常使用alpha版本的bug做太多。
答案 0 :(得分:6)
我做了完全相同的事情。但这很久以前,所以今天可能有更好的工具。
我发现我需要的是装载机。加载器主程序在类路径中没有app jar。它首先根据需要下载了更新,然后在类路径中使用app jars创建了一个自定义类加载器,并调用了应用程序主类的main方法。这不是很复杂。 IIRC我需要这样做,因为如果它们已经在类路径中,则不能在窗口中覆盖jar。
希望这会有所帮助。
答案 1 :(得分:4)
答案 2 :(得分:4)
更新,插件,关注点分离等正是OSGi的含义 - 您可能想看看这个。它不会自由(阅读:初始学习曲线陡峭,特别是当你正在使用类加载技巧时)至少有很好的开源实现(felix - 见felix.apache.org,equinox - 见{{3}和其他人)
对于这些实现,autoupdater可用 - 如果正确编写模块,则可以在运行时更新而无需重新启动。
答案 3 :(得分:1)
我相信您应该再次关注Java WebStart,或者至少详细说明您认为会导致问题的“时髦的类加载”(因为它可能会导致此处提出的任何解决方案出现问题)。
IIRC,您可以使用Java WebStart(http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources)设置命令行参数。
答案 4 :(得分:1)
我肯定会先试用Webstart。即使是使用Webstart的早期Eclipse RCP应用程序,我们已经取得了很多成功,并且您可能无法获得比OSGI框架(Eclipse Equinox)更加时髦的类加载问题。
您是否可以在关于类加载方法的问题中提供更多详细信息?
关于GC和其他VM设置:这些很容易在Webstart用于启动应用程序的JNLP(Java网络启动协议)文件中指定。
答案 5 :(得分:1)
Java Web Start是不错的选择。 GC的东西并不重要。类加载可能是个问题。但是当您受到用户信任时,您可以授予AllPermisions,您将能够进行自定义类加载。也许用类加载来重新考虑时髦的东西会很好。这真的有必要吗?或者看看NetBeans。应该找到自动更新的灵感。