Как найти сиротские плагины в RCP затмения? - PullRequest
2 голосов
/ 29 июля 2009

Обновление сайтов с RCP запрещает несвязанные плагины, в противном случае плагины, которые не включены в функцию. Если это условие не выполнено, диспетчер обновлений возвращает следующую ошибку: Результирующая конфигурация не содержит платформы.

К сожалению, нет способа определить, какие плагины являются бесхозными. Как найти сиротские плагины?

1 Ответ

4 голосов
/ 29 июля 2009

Вот отправная точка (это относится к Eclipse 3.4 и более поздним версиям, когда был представлен репозиторий P2, более ранние версии хранят свою конфигурацию по-другому. Во IIRC вы можете увидеть все плагины и функции в platform.xml).

Создайте новый проект плагина (New-> Other-> Plug-in Development-> Plug-in Project) с шаблоном «Hello World», затем перетащите этот код в метод run SampleAction.

Запустите плагин как тестовое приложение Eclipse и выберите Sample Menu-> Sample Action, плагины, которые не принадлежат какой-либо функции, будут выводиться на консоль родительского рабочего пространства. Когда я запустил это, их было намного больше, чем я ожидал, я немного просмотрел и не могу обнаружить логическую ошибку.

Редактировать, обнаружена логическая ошибка, использовался неверный индекс массива, использованный в самом внутреннем цикле. Тем не менее, не совсем верно.

Редактировать 2. (Момент Facepalm) Нашел проблему. Обязательно запустите целевое рабочее пространство с всем рабочим пространством и включенными целевыми подключаемыми модулями, включенными , иначе это, очевидно, приведет к искажению ваших результатов. Если вы установите плагин и оденете его немного, у вас не возникнет этой проблемы.

//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());
        }
    }            
}
...