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 を使用してそれを行うには 2 つのアイデアがあります。

  1. プロファイルをテスト ロックして、変更されているかどうかを確認してください。org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry.lockProfile(Profile)
  2. 前と同じように実行しますが、IlegalStateException をキャッチし、実行中のプロファイル変更操作が終了したときに通知されるように をProvisioningListener登録します。IProvisioningEventBus
于 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 に答える