Хороший способ "обернуть" банки для OSGi с Maven - PullRequest
5 голосов
/ 30 декабря 2010

Я смотрел на инструменты PAX на OPS4J, например: этот , и я подумал, что нашел хороший способ:

  • Укажите артефакт
  • Создать собранный jar (jar, содержащий все зависимости) из этого jar и его транзитивных зависимостей
  • Оберните его с помощью BND для создания пакета OSGi

Оказывается, я был не прав - не похоже, что вещи PAX делают это. (RTFM, верно? :))

Но это заставило меня задуматься: есть ли что-то, что делает то, что я спрашиваю?

Я подумал, что, может быть, я смогу сделать это, создав простое POM и используя плагин maven-bundle-plugin, но это может показаться немного громоздким для того, что я спрашиваю.

ПРИМЕЧАНИЕ: Я понял, что встраивание и сборка jar на самом деле не "OSGi-способ" - поэтому я бы не стал этого делать, если бы не почувствовал, что это действительно полезно. Например - весна.

Заранее спасибо.

Ответы [ 4 ]

8 голосов
/ 18 марта 2011

Я написал архетип maven, который поможет вам обернуть банку в комплект OSGI.

Допустим, вы хотите обернуть commons-collection версии 3.2.1

Сначала получите архетип и установите его

git clone git://github.com/HallwayTech/maven-wrap-jar-archetype.git 
cd maven-wrap-jar-archetype
maven install

Затем используйте архетип, чтобы начать свой проект.

mvn archetype:create \
  -DarchetypeGroupId=com.hallwaytech.osgi \
  -DarchetypeArtifactId=wrap-jar \
  -DarchetypeVersion=1.0-SNAPSHOT \
  -DgroupId=commons-collections \
  -DartifactId=commons-collections \
  -Dversion=3.2.1

cd commons-collection

mvn install

Чтобы развернуть на Apache Sling внутри Felix, выполните:

mvn install -Pdeploy
4 голосов
/ 01 января 2011

Вы должны поддерживать локальный POM, чтобы сделать это. Нет утилиты, которая будет брать библиотеку / jar и выплевывать соответствующий OSGi MANIFEST в jar. В ServiceMix вместе со Spring уже есть много вещей, которые вы можете использовать в качестве примеров. Два таких примера, на которые я предлагаю посмотреть:

  • commons-io - простая библиотечная оболочка
  • OpenJPA - оборачивает основную банку и вводит с ней зависимости
2 голосов
/ 31 декабря 2010

Мы делаем нечто похожее на то, что вы описываете.Например, у нас есть внутренняя версия Apache QPid.Он состоит из 6 банок (клиент, ядро, общий, бэкпорт и т. Д.), Которые вы редко используете по отдельности.У нас есть один POM с BND, который берет все банки и делает из них один uber-osgi-jar.

Шаги:

  1. Объявите ваши зависимости (у нас есть банки, поэтомумы объявили их как системные deps.)
  2. Плагин импорта сборки maven-bundle-plugin (2.1.0)
  3. Установка правильных инструкций для пакетов экспорта, приватных и импортных пакетов
  4. Выполнениецели 'wrap' на этапе 'package'
1 голос
/ 31 мая 2013

Я пытался Принятый ответ и Ответ Эрика . Предложение Эрика было простым и сработало. Хотя в моем случае это показало огромный МАНИФЕСТ, а потом я вспомнил p2-maven-plugin . Этот последний метод работает очень хорошо в большом количестве случаев. Если нужный вам артефакт уже находится в связке или его зависимости являются связками, он просто помещает их в создаваемое хранилище. Если нет, он запустит maven-bundle-plugin с некоторыми настройками по умолчанию (или вы можете настроить нужные параметры). Очень круто!

Мне особенно нравится, что он захватывает переходные зависимости и заботится о них тоже. Если вам не нужен репозиторий, но вы хотите получить упакованный пакет, просто пойти и выбрать его из папки target/repository/plugins.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...