Экспорт пакета с зависимостями с другими пакетами - PullRequest
1 голос
/ 16 января 2012

У меня есть эта конфигурация OSGI:

/configurations
   config.ini
   somebundle.properties
/plugins
   bundleA
   bundleB
osgi-3.4.2-R34x_v2008826-1230.jar
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar
com.test.arquitectura.osgi.ConfiguratorModule_1.0.0.jar

Мой config.ini выглядит так:

osgi.bundles=org.eclipse.equinox.common@2:start, \
    org.eclipse.update.configurator@3:start, \
    com.test.arquitectura.osgi.ConfiguratorModule_1.0.0.jar@3:start
osgi.clean = true
eclipse.ignoreApp=true
osgi.parentClassLoader=app

Итак, AFAIK, когда я выполняю

java -Xms256M -Xmx1280M -jar osgi-3.4.2-R34x_v20080826-1230.jar 

Он читает config.ini, поэтому с помощью пакетов equinox.common и update.configurator «обнаруживает» все пакеты, развернутые в папке / plugins. После этого ConfiguratorModule (пользовательский пакет) просто считывает все пакеты в контексте и выполняет метод запуска каждого из них (bundleA и bundleB). У меня есть проект eclipse (bundleC), в котором используются некоторые предложения, определенные в bundleA и bundleB, поэтому MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: BundleC Plug-in
Bundle-SymbolicName: com.test.bundlec
Bundle-Version: 1.0.0
Bundle-Activator: com.test.bundlec.Activator
Import-Package: javax.naming,javax.sql,org.osgi.framework;version="1.3
 .0",org.osgi.util.tracker;version="1.3.1"
Bundle-ClassPath: .
Require-Bundle: com.test.BundleA;bundle-version="1.0.0",
com.test.BundleB;bundle-version="1.0.0"

Итак, я хочу сгенерировать файл плагина (jar) для проекта bundleC. Поскольку в опции «Require-bundle» есть два пакета, эти проекты (BundleA и BundleB) должны находиться в пути к классу bundleC, не так ли? Итак, в этом случае я просто генерирую пакет (экспортируя его как «Разработка плагинов») и помещаю новый пакет в папку плагинов. Я что-то упускаю?

Ну, если все, что я сказал, верно, вот моя проблема. У меня есть файл jar плагина для BundleA и BundleB, но у меня нет их исходного кода, поэтому я получаю сообщение об ошибке при экспорте BundleC в плагин jar, потому что, как кажется, он не может найти требуемые классы использует от BundleA и BundleB. Есть ли способ генерировать плагин без этих обязательных пакетов в classpath?

Я попытался «декомпилировать» их, а затем создать проекты и добавить их в путь к классам BundleC. Я могу сгенерировать плагин, затем помещаю его в папку плагинов, но при выполнении среды osgi bundleC не найден. Что я делаю не так?

Спасибо за ваши ответы

1 Ответ

0 голосов
/ 15 ноября 2012

Чтобы использовать что-то из BundleA и BundleB, они должны экспортировать это (например, они могут экспортировать класс для использования другими пакетами).Затем в BundleC вам нужно подождать, пока загрузятся BundleA и BundleB (например, с реализацией BundleListener, хотя этот сценарий обычно выполняется с помощью служб и ServiceTracker).

...