在java中简单的“检查更新”库

时间:2011-05-09 13:10:02

标签: java versioning eclipse-rcp

我正在使用Eclipse RCP,但是,主要是因为我完全控制了UI(删除了所有贡献,从头开始制作首选项等)我只是无法接受所包含的UPDATE MANAGER的复杂性和需求(同样,我使用PLUGINS不是功能,应用程序插件必须被提取 - 虽然我可以在最后一期中解决问题。)

无论如何,在第一种方法中我只想检查是否有更新版本的应用程序可用。

逻辑方法是检查服务器上的文件(xml?)。

那里有一个好的图书馆和例子吗?

感谢。

2 个答案:

答案 0 :(得分:3)

Eclipse现在支持p2,这是一个比旧的更新管理器更灵活的系统。它可用于安装新软件并检查现有软件的更新。

您可以在没有用户界面的情况下包含p2的自我更新部分,尽管此处介绍了包含帮助>安装新更新的完整流程http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application

如果您使用某项功能,eclipse中的所有更新都会更容易管理,但您可以在此功能中将RCP应用插件标记为扩展到目录而不是jar(它会自动执行)。 / p>

向任何应用添加自我更新都是非常重要的。您是一次更新所有罐子,还是只选择一个罐子?哪个罐子同时更新是有意义的?使用基于OSGi的eclipse,如何确保更新使系统处于工作状态? p2旨在帮助管理这些用例。见http://wiki.eclipse.org/P2

修改

可以使用p2 API添加简单的自我更新,而不包含任何UI代码:

public class SelfUpdateOperation {
    public static void update() {
        BundleContext context = FrameworkUtil.getBundle(
                SelfUpdateOperation.class).getBundleContext();
        ServiceReference<?> reference = context
                .getServiceReference(IProvisioningAgent.SERVICE_NAME);
        if (reference == null)
            return;
        Object obj = context.getService(reference);
        IProvisioningAgent agent = (IProvisioningAgent) obj;
        ProvisioningSession session = new ProvisioningSession(agent);
        UpdateOperation update = new UpdateOperation(session);
        IStatus result = update.resolveModal(new NullProgressMonitor());
        if (result.isOK()) {
            update.getProvisioningJob(new NullProgressMonitor()).schedule();
        } else {
            // can't update for some reason
        }
        context.ungetService(reference);
    }
}

这需要一点工作(可能产品必须包含更新站点),但这是基本的API。

答案 1 :(得分:1)

使用Java Web Start启动应用。自动更新是JWS的主要功能之一。