Как я получаю OSGi BundleContext для приложения RCP Eclipse?

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

.Pattern = "\d+\.?(\d?)+"

, он будет работать лучше. Вкратце:
\ d + = хотя бы одна цифра
. = Необязательная точка
(\ d?) + = Необязательные числа

Это не водостойкое выражение, но оно работает в некоторой степени, по крайней мере.

Второй проблемой является потенциальная проблема различия десятичных символов, и в этом случае вам нужно будет выполнить поиск и замену перед обработкой.

12
задан Thilo 18 February 2009 в 05:47
поделиться

2 ответа

Хитрый внутренний путь:

InternalPlatform.getDefault().getBundleContext()

мог сделать это.

Вы найдете пример в этом классе

public class ExportClassDigestApplication implements IApplication {

    public Object start(IApplicationContext context) throws Exception {
        context.applicationRunning();

        List<ExtensionBean> extensionBeans = ImpCoreUtil.loadExtensionBeans(&quot;com.xab.core.containerlaunchers&quot;);
        for (ExtensionBean bean : extensionBeans) {
            ILauncher launcher = (ILauncher) bean.getInstance();
            launcher.start();
        }
        ClassFilter classFilter = new ClassFilter() {
            public boolean isClassAccepted(Class clz) {
                return true;
            }
        };

        PrintWriter writer = new PrintWriter( new File( "C:/classes.csv"));

        Bundle[] bundles = InternalPlatform.getDefault().getBundleContext().getBundles();

Надлежащий путь:

Каждый плагин имеет доступ к своему собственному контексту пакета.

Просто удостоверьтесь, что Ваш сменный класс переопределяет запуск (BundleContext) метод. Можно затем сохранить его к месту, к которому могут легко получить доступ классы в плагине

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

13
ответ дан 2 December 2019 в 05:42
поделиться

Только что наткнулся на это при поиске в Интернете и подумал, что буду продвигать новый стандарт OSGi R4.2 (предоставляется Equinox, поставляемым с Eclipse 3.5). Если у вас нет активатора и вы не хотите создавать его только для кэширования контекста пакета, вы можете использовать FrameworkUtil.getBundle. Модификация предыдущего примера:

import org.osgi.framework.FrameworkUtil;

public class ExportClassDigestApplication implements IApplication {
    public Object start(IApplicationContext context) throws Exception {
        context.applicationRunning();
        BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass())
                                                   .getBundleContext();
    }
}
14
ответ дан 2 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: