Создание полного приложения OSGi с Felix & Maven

У меня есть набор пакетов OSGi, которые создаются с использованием Maven, и мне было интересно, есть ли доступ к плагину Maven, который позволяет мне сделать следующее:

  • Укажите набор пакетов для включения в дистрибутив и/или укажите один пакет и разрешите зависимости.
  • Создайте полное распределение структуры. Я имею в виду один zip файл, содержащий все необходимые пакеты, а также правильную структуру каталогов для felix, чтобы пользователь мог просто распаковать файл и набрать "java -jar bin/felix.jar".

Я сделал некоторый Googling, и я не нашел ничего очень многообещающего в стороне от appassembler. Есть ли у вас когда-нибудь подходящее решение?

Обновление Вот иллюстрация того, что я пытаюсь выполнить.

example-parent\
               bundle-one
               bundle-two
               bundle-three
               assembly-one
               assembly-two

Где assembly-one будет включать bundle-one и bundle-two и assembly-two будет включать bundle-two и bundle-three или любую их комбинацию. Затем, когда вы создадите свой проект, вы получите два zip файла, один для assembly-one и один для assembly-two, который будет содержать соответствующие пакеты в автономной установке felix. Например:

assembly-one.zip\
                 bin\felix.jar
                 bundle\bundle-one, bundle-two, plus bare min felix bundles
                 conf\any configuration files I need

Надеюсь, это даст немного больше информации о том, чего я пытаюсь выполнить. Я думаю, это похоже на то, как Eclipse делает feature.xml, но, конечно же, не использует Eclipse.

Ответ 1

Предложение Фреда использовать плагин сборки для упаковки автономного дистрибутива, который может быть заархивирован, является хорошим. Если вы ищете пример того, как файлы сборки для этого будут работать, в источнике примера блога Apache Aries используются плагины для сборки и сборки maven.

Другой подход заключается в создании артефактов приложений. Для этого пока нет ни одного стандарта OSGi, но несколько проектов обеспечивают способ группировки пакетов в супер-пакеты. Это не совсем то, что вы описываете с помощью своих сборок, поскольку инфраструктура OSGi не включена, но похожа на Eclipse feature.xmls. Взгляните на приложения Apache Aries eba (корпоративный пакетный архив), файлы плана Девы или функции Karaf. В большинстве этих пакетов вы получаете архив, который содержит некоторые пакеты и/или файл метаданных, который описывает содержимое приложения. Связки, которые не включены в архив, могут быть предоставлены из репозитория. Для Овна есть также упаковка eba maven, которая будет генерировать архив .eba, содержащий файл APPLICATION.MF и включающий пакеты.

У нас есть немного больше об этом в главе 4 Enterprise OSGi in Action (http://www.manning.com/enterpriseosgiinaction), или быстрый Google для eba, план Девы или функция karaf должны найти вас намного больше. Недостатком вашего варианта использования является то, что приложения нужно будет развертывать во время выполнения с соответствующей предустановленной технологией, поскольку ни один из них не является основным OSGi.

Другим проектом, который нужно упростить для развертывания, является установка файла Felix. Это позволяет отбрасывать пакеты в контролируемый каталог, что экономит на записи файлов конфигурации.

Ответ 2

Плагин Sling Launchpad [1] создает файл runnable jar или военный файл, в который встроена инфраструктура OSGi и настраиваемый список пакетов, возможно, что вам нужно. При этом вам даже не нужно распаковывать сгенерированный файл jar, просто его запуска достаточно.

[1] http://sling.apache.org/site/maven-launchpad-plugin.html

Ответ 3

Возможно, это может помочь в достижении того, что вы пытаетесь выполнить?

Я не знаю точно, но, может быть, это стоит того?

http://maven.apache.org/plugins/maven-assembly-plugin/

Также возможно следующее?:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

Это потребует немного чтения/исследования, но я думаю, что это может быть полезно. Если нет, то, возможно, я не правильно понимаю вашу цель, и я сожалею.

Ответ 4

Если вы используете OSGi v4 + и строите с Maven, используйте pax-ops4j. Это очень удобно использовать и делает разработку OSGi легким.