標準の p2 Operations API または 'p2 Silent Update' を使用して、起動時に 'Checking for Available Updates' の更新メカニズムが既に実装されている Eclipse 製品があります。これは問題なく動作し、更新操作は、インストールされている更新とインストールされていない更新など、すべての依存関係を解決できます。また、新しい更新が利用可能な場合は、それらを正しくダウンロードします。
同じ Operations API または 'p2 Silent install' を使用して、起動時に '利用可能な新しいインストールを確認する' の同様の機能を実装しました。私のコードは次のようになります。
InstallOperation install = new InstallOperation(provisioningSession, toInstall);
IStatus status = install.resolveModal(null);
if (status.getSeverity() == IStatus.OK) {
Job job = operation.getProvisioningJob(null);
job.schedule();
}
問題は、新しいバンドルをインストールした後 (アプリケーションの再起動後にのみ表示される)、それらが既にインストールされていることを確認する必要があることです。そのために標準 API を使用します。
IProfileRegistry profileRegistry = (IProfileRegistry) provisioningAgent.getService(IProfileRegistry.SERVICE_NAME);
IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
Collection<IInstallableUnit> alreadyInstalled = profile.available(QueryUtil.ALL_UNITS, null).toUnmodifiableSet();
問題は、インストールされているユニットのリストに、新しくインストールしたバンドルが含まれていないことです。InstallOperation は、これらのバンドルがインストールされていないかのように OK に解決されるため、アプリケーションが常に同じバンドルをインストールしようとするという別の奇妙な観察 (これは、現在の p2 プロファイルに実際には含まれていないためだと思います。得られる結果と同じです)現在のプロファイルからインストールされているすべてのバンドルを一覧表示する場合は、上記のコードを参照してください)。
それがバグなのか、Operations API を介してインストールされたバンドルを含む別の p2 プロファイルがあるのか、現在のプロファイルの一部として登録されない理由 (それらがコピーされてインストールされていることがわかりますが) を知りたいです。私のアプリは正しく)。
オペレーション API: