Java(桌面)应用程序的“自动更新”?

28

你推荐哪个系统来实现一些Java(桌面)应用程序的“自动更新”?我还希望拥有模块/插件的安装和更新功能。类似于Eclipse和Firefox。

我知道Eclipse RCP的OSGi以及NetBeans RCP在这方面也有一些东西。使用它们各自的RCP工具包来使用它们的模块和自动更新系统吗?

还有其他选择吗?

5个回答

18
你看过 Java Web Start 吗? 它会在服务器上检查更新模块,如果需要就下载,否则将缓存在客户端电脑上并从那里启动。

7
Webstart可以使用,但存在许多奇怪的问题,特别是当您安装多个版本或相同版本的多个副本时(这对开发人员/质量保证经常会出现),还有很多需要前往缓存查看器等操作的情况。 - John Gardner
2
另外,如果您使用WebStart,用户始终可以打开Java控制台,因此请小心处理发送到System.out/err流的任何内容。 - John Gardner
3
JWS的问题在于安全管理器,它比普通的安全管理器更加严格。 - guerda
1
请注意,Java Web Start传统上存在许多缓存问题。您可以通过确保每个部署的文件的每个版本具有唯一的URL(例如通过在URL中嵌入版本名称或发布编号)来提供帮助。 - Thorbjørn Ravn Andersen
@JohnGardner 用户可以随时打开控制台。 - Tomáš Zato
显示剩余4条评论

9

谢谢,这很有趣。可能可以将其用于“核心容器”,例如Eclipse的OSGi用于插件? - stolsvik

8

如果您的更新不频繁且带宽良好,Web Start非常适合。

但是,如果不是这样,您需要其他东西。我曾参与过一个项目,我们的更新频繁且带宽很差。我们自己开发了一个类文件服务器;启动代码将与服务器通信,以查看每个类是否需要更新。如果需要,更改的类将被下载,应用程序将继续正常运行。

实际上,这并不是非常复杂的,因此,如果现有工具无法使用,请勇于自己开发。


jardiff 意味着只需下载差异部分,而非整个文件。即使带宽较差也应该没问题。 - Tom Hawtin - tackline
@Tom,你有这方面的经验吗?我想听听它是否值得投入精力。 - Thorbjørn Ravn Andersen
davetron,我该如何在一个JAR文件中实现启动代码?类差异扫描没有问题,但启动有问题。我无法在下载更新后覆盖正在运行的JAR。 - Tomáš Zato
Tomáš:我们做的事情(我有点模糊,因为这已经快7年了 :))是下载类,并确保新类在旧类之前在类路径上。我们对类路径有控制权,所以这不是问题。 - davetron5000

1

看一下Equinox p2,这可能是你所说的“Eclipse RCP的OSGi东西”... 据我所知,你需要将你的应用程序Osgi化才能使用p2(至少意味着将整个应用程序制作成一个大捆绑包)。


0

它不像插件系统。但它具有桌面应用程序的更新和安装功能。您可以通过链接this查看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接