简单的;检查是否有更新";java中的库

简单的;检查是否有更新";java中的库,java,versioning,eclipse-rcp,Java,Versioning,Eclipse Rcp,我使用的是Eclipse RCP,但是,主要是因为我完全控制了UI(删除了所有贡献,从头创建了首选项等等),我无法接受包含的更新管理器的复杂性和需求(此外,我使用插件而不是功能,应用插件必须被提取出来——尽管我可能会对上一个问题感到困惑) 无论如何,在第一种方法中,我只想检查是否有新版本的应用可用。 合乎逻辑的方法是对照服务器上的文件(xml?)进行检查 有好的图书馆和例子吗 谢谢。用于启动应用程序。自动更新是JWS的主要功能之一。Eclipse现在支持p2,这是一个比旧的更新管理器灵活得多的系

我使用的是Eclipse RCP,但是,主要是因为我完全控制了UI(删除了所有贡献,从头创建了首选项等等),我无法接受包含的更新管理器的复杂性和需求(此外,我使用插件而不是功能,应用插件必须被提取出来——尽管我可能会对上一个问题感到困惑)

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

合乎逻辑的方法是对照服务器上的文件(xml?)进行检查

有好的图书馆和例子吗


谢谢。

用于启动应用程序。自动更新是JWS的主要功能之一。

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

您可以在没有UI的情况下包含p2的自更新部分,尽管此处描述了包含帮助>安装新更新的完整过程

如果您使用某个功能,eclipse中的所有更新都更易于管理,但是该功能可以将您的RCP应用程序插件标记为扩展到目录而不是jar(它会自动完成)

向任何应用程序添加自我更新都是非常重要的。您是一次更新所有JAR,还是只选择一个?同时更新哪些JAR有意义?在基于OSGi的eclipse中,如何确保更新使系统处于工作状态?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);
    }
}
公共类自更新操作{
公共静态无效更新(){
BundleContext=FrameworkUtil.getBundle(
SelfUpdateOperation.class).getBundleContext();
ServiceReference=上下文
.getServiceReference(IProvisingAgent.SERVICE_名称);
if(reference==null)
返回;
Object obj=context.getService(参考);
i提供代理=(i提供代理)对象;
ProvisioningSession会话=新的ProvisioningSession(代理);
UpdateOperation update=新的UpdateOperation(会话);
IStatus result=update.resolveModel(新的NullProgressMonitor());
if(result.isOK()){
update.getProvisioningJob(新的NullProgressMonitor()).schedule();
}否则{
//由于某些原因无法更新
}
ungetService(参考);
}
}

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

谢谢,但不可能。。。我使用安装程序。我想提到p2,但后来决定不提,因为OP还没有使用它,而且他似乎不太可能愿意切换。:-)也就是说,如果想要更新功能,就必须选择一些东西。JWS的设计中包含了更新(我理解他已经有了重叠),p2是专门为更新eclipse/OSGi应用而设计的。Paul,我感谢你的努力,但使用p2目前不是一条可行的道路。我不想要任何UI贡献(对于我所寻求的简单性来说太混乱了——顺便说一句,RCP中的所有东西都是如此),因此这将非常耗时。您不需要UI来执行简单的自我更新,有一个使用org.eclipse.equinox.p2.operations.updateOperations的简单API。我将添加一个示例。