2015-04-17 4 views
0

Я создал проект OSGi Bundle Project в Eclipse, и я хочу запустить его программно из другого Java-проекта.Программный запуск пакета OSGi

Это то, что я пытаюсь сделать:

FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next(); 
Map<String,String> config = new HashMap<String,String>(); 
Framework framework = frameworkFactory.newFramework(config); 
framework.start(); 
BundleContext context = framework.getBundleContext(); 
Bundle bundle = context.installBundle("file:./test.ServiceA"); 
bundle.start(); 

, но у меня есть эта ошибка

Exception in thread "main" org.osgi.framework.BundleException: Error loading bundle activator. 
... 
Caused by: java.lang.ClassNotFoundException: test.servicea.Activator cannot be found by test.ServiceA_1.0.0.qualifier 

все работает, если я установить плагин банку вместо точки в папку

Bundle bundle = context.installBundle("file:./tmp/test.ServiceA_1.0.0.201504172035.jar");  

, но я хотел бы отлаживать непосредственно папку проекта Eclipse.

Кто-нибудь может мне помочь?

ответ

1

Поместите ссылку "" в начало URL. Делая это

  • Содержание пучка не будет скопировано на рабочий (или кэш) папку контейнера OSGi, но он будет использоваться из исходного местоположения
  • Папка может быть установлена ​​как OSGi расслоения

Это не является частью спецификации, но работает в равноденствия и Феликс (и, вероятно, в Knopflerfish а)

Основываясь на вашем примере:

Bundle bundle = context.installBundle("reference:file:./test.ServiceA"); 

Редактировать на основе комментариев

В файле MANIFEST.MF находится в ./test.ServiceA но скомпилированные классы находятся под ./test.serviceA/bin, то «Bundle- Classpath: bin " Заголовки MANIFEST должны быть временно предоставлены до тех пор, пока пакет не будет установлен из папки. Перед выпуском заголовок должен быть удален, поскольку классы будут в корне созданного JAR.

+0

Это не работает, оно продолжает возвращать мне ту же ошибку 'java.lang.ClassNotFoundException: test.servicea.Activator не может быть найден test.ServiceA_1.0.0.qualifier' – dash1e

+0

Делает ./test.serviceA/test /servicea/Activator.class существует? Не могли бы вы попытаться установить ваш комплект, используя абсолютный путь? –

+0

Eclipse помещает все классы в папку './test.serviceA/bin/...'. – dash1e

Смежные вопросы