вторник, 17 марта 2009 г.

Небольшое исследование на тему "Введение в Equinox"

Читаю сейчас очень интересную статью Введение в Equinox.
Попытался сделать, как там написано, и наткнулся на некоторые проблемы.

Создал свой "бандл", запустил osgi, загрузил свой bundle


и пытаюсь его запустить
Получаю такую картину:

Не может найти класс. Что-то это как-то подозрительно. Потому, что этот класс есть в jar файле самого фреймворка osgi.

Не долго думая, я попробовал сгенерировать такой bundle используя wizard эклипса.
Это оказалось элементарно просто!

Выбираем в меню New->Project->Plug-in Project


Далее надо написать имя проекта и OSGi в качестве платформы


Далее надо нажать два раза "Next" и выбрать, что нам плагин нужен на основе примера (бандл)


Обратите внимание, что в файле MANIFEST.MF есть такая строчка:


Кстати, в этом манифесте можно сделать "экспорт" и получить готовый JAR файл:


Загрузим получившийся плагин и попробуем запустить:



Работает!! Супер!

Вывод: надо прописывать "Import-Package:" в манифест файле, чтобы все было ОК ;-)

8 комментариев:

Unknown комментирует...

Вывод неверный )) Если не указывать Import-Package то бандл импортирует ВСЕ доступные ему пэкеджы. В вашем же случае надо было указать
Require-Bundle: org.eclipse.osgi тогда ваш бандл будет в обязательном порядке импортировать пэкеджи из org.eclipse.osgi.

Unknown комментирует...

Т.е. сейчас вашему бандлу не будут доступны никакие пэкеджи кроме org.osgi.framework

Alexander Lipatov комментирует...

Я забыл сказать, что брал манифест из вашего поста про Equinox. То есть он у меня выглядел вот так: http://alexlpt.narod.ru/images/osgi/osgi_test_10.png

И не работало!

Unknown комментирует...

Странно, потому что последней строчкой в приведенном мною манифесте как раз идет Require-Bundle:

Unknown комментирует...

Сейчас проверил. Все работает вот с таким манифестом:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Demo Plug-in
Bundle-SymbolicName: demo
Bundle-Version: 1.0.0
Bundle-Activator: demo.Activator
Require-Bundle: org.eclipse.osgi

Alexander Lipatov комментирует...

Павел, спасибо!
Я стал разбираться, и оказалось, что когда я делал Export as Jar в eclipse, то он брал файл манифеста и выкидывал от туда строку "Require-Bundle: org.eclipse.osgi". Я долго мучился, но так и не понял, по какому принципу эклипс это делает. Поднял эту строку на несколько строчек выше и он перестал ее выбрасывать. В итоге заработало! Мистика какая-то!

Alexander Lipatov комментирует...

Просто в получившемся после экспорта jar файле был совсем не такой манифест, какой я ему указывал. Я в шоке, почему же он выкидывал от туда строки.. я так и не нашел причину. Но в любом случае получил экспириенс))

Unknown комментирует...

>> Просто в получившемся после экспорта jar файле был совсем не такой манифест, какой я ему указывал.

Да, есть у эклипса такой глюк, поэтому я и советовал в своей статье проверить манифест получившегося jar-архива. Сам я собирал антом.

>> Но в любом случае получил экспириенс))
Это самое главное )