2016-01-19 5 views
0

У меня есть два расслоения A и B. A зависит от B (указано как Required-Bundle: B в MANIFEST A).Как установить и начать с пакетами osgi за один раз с одним из них в зависимости от другого

Теперь я установил пакеты A, B один за другим (вызывая BundleContext.installBundle). Затем, когда я пытаюсь запустить расслоение, я получаю следующие ошибки

org.osgi.framework.BundleException: Could not resolve module: A [140] 
    Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0" 

Я понимаю, из исключения того, что расслоение B еще не началась (разрешено). Теперь как решить эту проблему?

Единственный способ решить эту проблему - сортировать пакеты по ее зависимостям? Или Есть ли какие-либо опции, такие как указание папки в OSGi, чтобы все скопированные файлы пакета были активированы?

Кстати, я использую равноденствие.

+1

Похоже, что Bundle B еще не установлен, когда вы запускаете Bundle A? Структура автоматически попытается решить B, когда она будет установлена, вам не нужно ее запускать. –

ответ

4

Убедитесь, что вы установили ВСЕ расслоений, прежде чем начать ЛЮБУЮ из них. То есть вам нужно сделать, это:

  1. Установка A, установка Аргументы B
  2. Start A, Start B.

и НЕ это:

  1. Установка A, A Start
  2. Установка B, Пуск B

Во втором (неправильном) сценарии вы получите ошибку разрешения, поскольку A зависит от B и B, пока не существует OSGi.

В первом (правильном) сценарии при запуске A OSGi будет работать так, что ему необходимо разрешить как A, так и B для удовлетворения зависимостей.

[Кстати, в вашем вопросе вы, кажется, путаетесь, начиная с разрешения: вы сказали, что «B еще не запущен (разрешен)». Это разные вещи. B необходимо установить только до того, как вы запустите A, и OSGi решит его автоматически, когда это необходимо.]

+0

Мне стало жаль. –

+0

@AdamArold Нет проблем! –

+0

Спасибо @NeilBartlett –

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

  • Нет связанных вопросов^_^