当我尝试在Eclipse启动时更新Eclipse插件时遇到一些问题。我的程序在Eclipse启动时弹出Help -> Check for Updates
对话框。但是,当用户快速进行更新时,Eclipse会抛出一个异常,说明p2配置文件正在使用中。我相信这是因为其他Eclipse作业在启动时使用p2配置文件,因此我的程序无法使用p2配置文件来更新插件。如何安全使用p2配置文件?如何单独使用p2配置文件?
我上传了在github上重现问题所需的最少代码。而且,我已经在an issue on the github repository中详细描述了问题以及重现它的步骤。
答案 0 :(得分:0)
您可以从ProvisioningJob
获取UpdateOperation
,让它属于正在运行的配置文件更改作业系列。请参阅org.eclipse.core.runtime.jobs.Job.belongsTo(Object)
。
此外,我有两个想法是通过使用内部API来实现的,
org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.lockProfile(Profile)
ProvisioningListener
上注册IProvisioningEventBus
,以便在运行profilechangeoperation完成时收到通知。答案 1 :(得分:0)
My commit通过调用命令“org.eclipse.equinox.p2.ui.sdk.update”打开“检查更新”对话框,而不是调用以下方法。
org.eclipse.equinox.p2.ui.ProvisioningUI.openUpdateWizard(boolean, UpdateOperation, LoadMetadataRepositoryJob)
令人惊讶的是,这一变化似乎解决了访问p2配置文件时竞争条件的问题。有没有人解释我的提交如何消除竞争条件?