3

我在启动 Eclipse 时尝试更新 Eclipse 插件时遇到一些问题。Help -> Check for Updates我的程序在 Eclipse 启动时弹出对话框。但是,当用户快速进行更新时,Eclipse 会抛出一个异常,指出 p2 配置文件正在使用中。我相信这是因为其他 Eclipse 作业在启动时使用 p2 配置文件,因此我的程序无法使用 p2 配置文件来更新插件。如何安全地使用 p2 配置文件?如何单独使用 p2 配置文件?

我已经上传了在github上重现问题所需的最少代码。而且,我已经在 github 存储库的问题中详细描述了问题以及重现问题的步骤。

4

2 回答 2

0

您可以ProvisioningJob从您的UpdateOperation, 让它属于运行配置文件更改工作的家庭。见org.eclipse.core.runtime.jobs.Job.belongsTo(Object)

此外,我有两个想法可以通过使用内部 API 来实现,

  1. 尝试锁定配置文件以查看它是否被更改。org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.lockProfile(Profile)
  2. 运行您之前的类似操作,但捕获 IlegalStateException,然后在运行 profilechange 操作完成时注册一个以收到通知ProvisioningListenerIProvisioningEventBus
于 2011-06-17T03:07:41.143 回答
0

我的提交 通过调用命令“org.eclipse.equinox.p2.ui.sdk.update”而不是调用以下方法打开“检查更新”对话框。

org.eclipse.equinox.p2.ui.ProvisioningUI.openUpdateWizard(boolean, UpdateOperation, LoadMetadataRepositoryJob)

令人惊讶的是,此更改似乎解决了访问 p2 配置文件时的竞争条件问题。有人对我的提交如何消除竞争条件有解释吗?

于 2011-06-18T03:26:56.110 回答