2

RCP を使用してサイトを更新すると、孤立したプラグインが禁止されます。それ以外の場合は、機能に含まれていないプラグインです。この条件が満たされない場合、更新マネージャーは次のエラーを返します: 結果の構成にプラットフォームが含まれていません。

残念ながら、孤立したプラグインを特定する方法はありません。孤立したプラグインを見つける方法は?

4

1 に答える 1

4

これが出発点です (これは Eclipse 3.4 以降に適用されます。P2 リポジトリが導入されたとき、以前のバージョンでは構成が異なる方法で保存されます。IIRC ではすべてのプラグインと機能を platform.xml で確認できます)。

「Hello World」テンプレートを使用して新しいプラグイン プロジェクト ([新規] -> [その他] -> [プラグイン開発] -> [プラグイン プロジェクト]) を作成し、このコードを SampleAction の run メソッドにドロップします。

プラグインをテスト Eclipse アプリケーションとして実行し、[サンプル メニュー] -> [サンプル アクション] を選択します。機能に属さないプラグインは、親ワークスペースのコンソールに出力されます。これを実行したとき、予想よりもかなりの数がありました。いくつか調べてみましたが、論理エラーを見つけることができません。

編集、論理エラーが見つかりました。最も内側のループで使用されている間違った配列インデックスを使用していました。それでもまだ完全ではありません。

編集 2. (Facepalm moment) 問題が見つかりました。すべてのワークスペースと有効なターゲット プラグインを有効にしてターゲット ワークスペースを実行してください。そうしないと、明らかに結果が歪められます。プラグインをインストールして少しドレスアップすれば、この問題は発生しません。

//get all the plugins that belong to features
IBundleGroupProvider[] providers = Platform.getBundleGroupProviders();

Map<Long, IBundleGroup> bundlesMap = new HashMap<Long, IBundleGroup>();

if (providers != null) {
    for (int i = 0; i < providers.length; i++) {
        IBundleGroup[] bundleGroups = providers[i].getBundleGroups();

        System.out.println("Bundle groups:");
        for (int j = 0; j < bundleGroups.length; j++) {
            Bundle[] bundles = bundleGroups[j] == null ? new Bundle[0] : bundleGroups[j]
                    .getBundles();
            System.out.println(bundleGroups[j].getIdentifier());
            for (int k = 0; k < bundles.length; k++) {
                bundlesMap.put(bundles[k].getBundleId(), bundleGroups[j]);
            }                
        }
    }
}

BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext();

if(bundleContext instanceof BundleContextImpl) {            
    Bundle[] bundles = ((BundleContextImpl)bundleContext).getBundles();

    System.out.println("Orphan Bundles:");
    for (int i = 0; i < bundles.length; i++) {
        if(!bundlesMap.containsKey(bundles[i].getBundleId())) {
            System.out.println(bundles[i].getSymbolicName());
        }
    }            
}
于 2009-07-29T15:33:22.357 に答える