2012-01-16 5 views
1

у меня есть такая конфигурация 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, как это:

[email protected]:start, \ 
    [email protected]:start, \ 
    [email protected]: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). У меня есть затмение проекта (bundleC), который использует некоторые clases определенные в 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. Поскольку в опции «Требовать-расслоение» есть два пакета, эти проекты (BundleA и BundleB) должны быть в pathpath класса bundle, не так ли? Итак, в этом случае я просто создаю пакет (экспортируя его как «Разработка плагинов») и размещаю новый пакет в папке плагина. Есть что-то, что мне не хватает?

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

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

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

+0

Просьба указать точную ошибку, которую вы получаете, любые следы стека и т. Д. – katsharp

ответ

0

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

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