Eclipse plugin Eclipse(Lotus Notes 8.5.2)插件的自动升级

Eclipse plugin Eclipse(Lotus Notes 8.5.2)插件的自动升级,eclipse-plugin,lotus-notes,auto-update,Eclipse Plugin,Lotus Notes,Auto Update,我试图为LotusNotes8.5.2提供一个自动更新功能。该插件是在Eclipse3.4.2下开发的。到目前为止,我还没有找到一种通过连接到LotusNotesAPI来实现这一点的标准方法。我想到的是以下两种方法 使用EclipseP2 SDK在运行时执行自动升级(在插件的早期启动时,更新程序将检查新版本并更新插件)。此条目描述方法->。不幸的是,SDK不是Eclipse3.4.2的一部分,我没有在3.4.2中使用这种方法 使用一个外部进程关闭Lotus Notes,从Lotus的插件目录中

我试图为LotusNotes8.5.2提供一个自动更新功能。该插件是在Eclipse3.4.2下开发的。到目前为止,我还没有找到一种通过连接到LotusNotesAPI来实现这一点的标准方法。我想到的是以下两种方法

  • 使用EclipseP2 SDK在运行时执行自动升级(在插件的早期启动时,更新程序将检查新版本并更新插件)。此条目描述方法->。不幸的是,SDK不是Eclipse3.4.2的一部分,我没有在3.4.2中使用这种方法

  • 使用一个外部进程关闭Lotus Notes,从Lotus的插件目录中删除插件的旧版本,将新版本复制到插件目录,再次启动Lotus Notes并终止该进程


第二种方法似乎合理,但需要在自动升级过程中关闭LotusNotes。所以我的问题是——有没有类似于上面第一种方法或LotusNotes的任何其他标准过程的方法?提前感谢。

请阅读小部件目录。它会做你想做的事


不过,在任何插件更新之后,您仍然需要重新启动客户端

谢谢你的建议Simon-我找到了一个更直接的方法来使用这篇文章中的建议-> 添加了一个配置操作(IConfigureFeatureOperation),用于将功能的版本更新到Lotus Notes的platform.xml文件中。 下面是一个示例片段,演示了该方法:

        String updateSiteUrl = configuration.getUpdateSiteUrl();

        IProgressMonitor monitor = new NullProgressMonitor();
        ISite updateSite = SiteManager.getSite(new URL(updateSiteUrl),
                monitor);
        IFeatureReference[] siteFeatures = updateSite
                .getFeatureReferences();
        ILocalSite localSite = SiteManager.getLocalSite();

        List<IInstallFeatureOperation> installOps = new ArrayList<IInstallFeatureOperation>();
        List<IConfigFeatureOperation> configOps = new ArrayList<IConfigFeatureOperation>();

        IConfiguredSite[] configuredSites = localSite
                .getCurrentConfiguration().getConfiguredSites();

        for (IConfiguredSite configuredSite : configuredSites) {

            IFeatureReference[] localSiteFeatures = configuredSite
                    .getConfiguredFeatures();

            for (IFeatureReference siteFeature : siteFeatures) {
                for (IFeatureReference localSiteFeature : localSiteFeatures) {

                    VersionedIdentifier featureVi = siteFeature
                            .getVersionedIdentifier();
                    VersionedIdentifier localFeatureVi = localSiteFeature
                            .getVersionedIdentifier();

                    if (featureVi.getIdentifier().equals(
                            localFeatureVi.getIdentifier())) {

                        if (featureVi.getVersion().isGreaterThan(
                                localFeatureVi.getVersion())) {

                            installOps
                                    .add(OperationsManager
                                            .getOperationFactory()
                                            .createInstallOperation(
                                                    configuredSite,
                                                    siteFeature
                                                            .getFeature(monitor),
                                                    null, null, null));

                            configOps
                                    .add(OperationsManager
                                            .getOperationFactory()
                                            .createConfigOperation(
                                                    configuredSite,
                                                    siteFeature
                                                            .getFeature(monitor),
                                                    null, null));
                        }
                    }
                }
            }
        }

        if (installOps.size() > 0) {

                // install new feature
                for (Iterator<?> iter = installOps.iterator(); iter
                        .hasNext();) {
                    IInstallFeatureOperation op = (IInstallFeatureOperation) iter
                            .next();
                    op.execute(monitor, null);
                }

                // configure new feature
                for (Iterator<?> iter = configOps.iterator(); iter
                        .hasNext();) {
                    IConfigFeatureOperation op = (IConfigFeatureOperation) iter
                            .next();
                    op.execute(monitor, null);
                }

                localSite.save();}
String updateSiteUrl=configuration.getUpdateSiteUrl();
IProgressMonitor监视器=新的NullProgressMonitor();
ISite updateSite=SiteManager.getSite(新URL(updateSiteUrl),
监视器);
IFeatureReference[]siteFeatures=updateSite
.getFeatureReferences();
ILocalSite localSite=SiteManager.getLocalSite();
List installOps=new ArrayList();
List configOps=new ArrayList();
IConfiguredSite[]配置站点=本地站点
.getCurrentConfiguration().getConfiguredSites();
对于(IConfiguredSite configuredSite:configuredSites){
IFeatureReference[]localSiteFeatures=configuredSite
.getConfiguredFeatures();
对于(IFeatureReference siteFeature:siteFeatures){
对于(IFeatureReference localSiteFeature:localSiteFeatures){
VersionedIdentifier功能vi=站点功能
.getVersionedIdentifier();
VersionedIdentifier localFeatureVi=localSiteFeature
.getVersionedIdentifier();
如果(featureVi.getIdentifier())等于(
localFeatureVi.getIdentifier()){
如果(featureVi.getVersion())大于(
localFeatureVi.getVersion()){
安装
.add(操作管理器)
.getOperationFactory()
.createInstallOperation(
配置站点,
站点特征
.getFeature(监视器),
空,空,空),;
配置操作
.add(操作管理器)
.getOperationFactory()
.createConfigOperation(
配置站点,
站点特征
.getFeature(监视器),
空,空),;
}
}
}
}
}
如果(installOps.size()>0){
//安装新功能
for(迭代器iter=installOps.Iterator();iter
.hasNext();){
IInstallFeatureOperation op=(IInstallFeatureOperation)iter
.next();
op.execute(监视器,空);
}
//配置新功能
for(迭代器iter=configOps.Iterator();iter
.hasNext();){
IConfigFeatureOperation op=(IConfigFeatureOperation)iter
.next();
op.execute(监视器,空);
}
localSite.save();}

感谢Simon的建议-我找到了一种更直接的方法来使用这篇文章中的建议->