2013-11-22 4 views
0

Я очень новичок в платформе OSGi.Упаковка нескольких пакетов OSGi в одном банке

Имея OSGi расслоения B1, что имеет зависимость к другой пачке B2, что очень вероятно, не предусмотрено в контейнере, можно упаковать обе связки в одной и той же jar?

Если да: как это сделать? что произойдет, если установлен jar и пакет уже установлен?

+0

Любопытно, почему вы пытаетесь это сделать? Вы можете просто загружать пакеты B1 и B2. – codesalsa

+0

@codesalsa, потому что мы не можем заставить кого-то (нетехнического) загрузить два файла. На самом деле в OSGi есть плагиновая структура, и наиболее подходящий способ установить такой плагин - это предоставить файл jar (который является пакетом). –

ответ

3

Да, вы можете это сделать ....

Обычно пакеты OSGi являются файлами JAR, потому что они должны иметь META-INF/MANIFEST.MF. Рамка OSGi не может напрямую читать ваш JAR с несколькими пакетами.

Однако установка пакетов в OSGi включает вызов метода BundleContext.installBundle. Этот метод имеет два варианта: один из них принимает параметр InputStream в качестве параметра; этот InputStream должен предоставить содержимое пакета OSGi. Поэтому вы можете взять свой большой JAR и прочитать его с помощью JarInputStream, передав отдельные записи методу installBundle.

+0

Я видел, что у вас есть хорошая книга БЕСПЛАТНО: «OSGi in Practice» на вашем сайте. Большое спасибо, Нейл !!! –

0

Хотя OSGi напрямую не поддерживает несколько пакетов в одной и той же банке, существует стандартный набор для нескольких пакетов в том же архиве, который решает проблему распространения, которую вы пытаетесь решить. К сожалению, это может создать дополнительную проблему в вашем сценарии, потому что это часть корпоративного OSGi, а не основного OSGi, поэтому она не будет частью единой платформы Equinox или Felix. Если у вас больше контроля над стартовой платформой, которую используют ваши пользователи, она может делать то, что вам нужно.

Основная идея заключается в том, что вы упаковываете все свои связки в zip с расширением .esa вместе с простым манифестом. Затем вы можете распространять файл esa. Этот урок включает в себя более подробную информацию: http://coderthoughts.blogspot.co.uk/2013/04/osgi-subsystems.html?m=1

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