Зарегистрировать пакеты в PluginRegistry? - PullRequest
0 голосов
/ 30 декабря 2011

Я пытаюсь загрузить OSGi Bundles из произвольной папки во время выполнения, чтобы использовать их в моем приложении Eclipse RCP. Следующие шаги, которые я сделал до сих пор для достижения этой цели:

  1. Создать новый плагин
  2. Получить BundleContext от активатора плагинов
  3. Установить Bundle с помощью метода install () объекта BundleContext
  4. Запустить полученный комплект с помощью метода start ()

После этих шагов Bundle находится в состоянии ACTIVE и может быть получен через любой BundleContext. Моя проблема заключается в том, что пакет не может быть получен через PluginRegistry.getAllModels (). Очевидно, что PluginRegistry не перечисляет изменения в BundleContext. Мне нужно найти способ регистрации моего пакета в PluginRegistry. Это важно, потому что PluginRegistry используется уже существующими частями программного обеспечения, например, Редактор манифеста.

PluginRegistry не имеет метода для регистрации Пакетов. Есть ли способ добавить их в реестр?

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Класс PluginRegistry является классом времени разработки, поддерживающим PDE.Означает ли это, что ваше приложение RCP включает PDE и используется (частично) для разработки плагинов?Если это правда, то вам нужно будет потренироваться сейчас, когда PDE работает (это то, о чем я мало что знаю).Я рекомендую взглянуть на классы в плагине org.eclipse.pde.runtime (не на внутренние классы).Вы должны быть в состоянии работать с отладчиком и смотреть на код, как добавить плагин в среду выполнения PDE.Если у вас есть дополнительные вопросы по этому поводу, используйте группу новостей PDE на сайте Eclipse.

Если ваше приложение RCP не включает разработку плагинов, то нет необходимости работать с PluginRegistry во время выполнения, поэтому ясмущен вашим вопросом.Возможно, вы могли бы уточнить подробнее?

1 голос
/ 07 января 2012

Во время разработки Acceleo мы также столкнулись с этой проблемой, поскольку нам нужно позволить пользователю развертывать подключаемые модули Eclipse, расположенные в его рабочей области, в работающем экземпляре Eclipse (после этого мы также должны удалить эти подключаемые модули).Поскольку Acceleo является открытым исходным кодом, вы можете взглянуть на наш исходный код на github .

. Я не буду подробно здесь все описывать, но вы должны найти то, что вы ищете, примерно в строке 880.и после строки 752. Связанный файл - это наш служебный класс для манипулирования плагинами Eclipse в рабочей области и пакетами Eclipse в работающем экземпляре, так что вы можете найти там практически все, что нужно для решения вашей проблемы.

Smallпредупреждение: когда мы развертываем на лету плагин Eclipse, расположенный в рабочей области, мы деактивируем его plugin.xml.Поскольку большинство инструментов Eclipse просто смотрят на плагин, который в данный момент вносит свой вклад в их точку расширения, и поскольку они не слушают динамически, слушают установку / удаление плагинов Eclipse, способствующих их точке расширения (что можно сделать как this ) они могут хранить ссылки на вклады от плагинов, которые мы удалим позже, что может создать проблему.Это поведение подробно объясняется в строке 775 в первом связанном файле.

С уважением,

Стефан Бегодо

...