【问题标题】:Simple "check for update" library in javajava中简单的“检查更新”库
【发布时间】:2023-12-13 19:36:01
【问题描述】:

我正在使用 Eclipse RCP,但是,主要是因为我完全控制了 UI(删除了所有贡献,从头开始设置首选项等)我无法接受包含的 UPDATE MANAGER 的复杂性和需求(另外,我使用插件而不是功能,并且必须提取应用程序插件 - 尽管我可以解决最后一个问题)。

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

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

那里有好的库和示例吗?

谢谢。

【问题讨论】:

    标签: java versioning eclipse-rcp


    【解决方案1】:

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

    您可以在没有 UI 的情况下包含 p2 的自我更新部分,尽管此处描述了包含“帮助”>“安装新更新”的完整过程http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application

    如果您使用某个功能,则 Eclipse 中的所有更新都更易于管理,但您可以在该功能中将您的 RCP 应用程序插件标记为扩展为目录而不是 jar(它会自动执行此操作)。

    为任何应用程序添加自我更新并非易事。你是一次更新所有的罐子,还是只选择一个罐子?同时更新哪些罐子有意义?使用基于 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。

    【讨论】:

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

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

    【讨论】:

    • 谢谢,但不可能...我使用安装程序。
    最近更新 更多