2

標準の 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:

http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fp2_api_overview.htm

4

0 に答える 0