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