Как создать пакет OSGi из библиотеки jar?
Как создать пакет OSGi из библиотеки jar?
6 ответов
Если вы используете Eclipse: для этого есть мастер.
Он позволяет вам выбрать несколько библиотек jar и создать проект плагина (то есть комплект OSGi), включая эти jar.
Вы можете найти это здесь:
File -> New -> Other ... -> Plug-in from Existing jar Archives.
В принципе вам просто нужно добавить метаданные OSGi в манифест
Для eclipse существует создатель пакета, который дает очень практичный способ добавить эти записи, которые должны быть частью Plugin Dev Toolkit.
Вот статья, подробно описывающая процесс и как это сделать с помощью инструмента Bnd, maven и так далее.
Мне лично очень нравятся инструменты pax. Все это основано на командной строке, но очень практично. Для создания OSGi-пакета существующего jar-файла вы можете использовать инструмент bnd.
Сначала проверьте, можете ли вы найти версию библиотеки с поддержкой osgi в репозиториях.
- SpringSource http://www.springsource.com/repository
- Fusesource http://repo.fusesource.com/
Если вы не можете найти версии с поддержкой OSGi. Вы можете продолжить использовать инструмент pax - PaxConstruct или использовать инструмент Bnd aQute.
- Создайте новый проект подключаемого модуля из существующего архива JAR.
- Добавить файл jar для экспорта
- Нажмите "Далее" и назовите проект.
- НОТА:
- Убедитесь, что на целевой платформе выбран каркас OSGI.
Разархивировать архивы JAR в проект отменено -> отмена выбора, будет экспортировать все пакеты из JAR
если выбрано Разархивировать архивы JAR в проект, вам нужно будет вручную экспортировать необходимые пакеты в файл MANIFEST.MF.
Нажмите Готово. Вы найдете проект с именем transport-5.1.1, созданный в вашей рабочей области. Также вы можете проверить, что все пакеты JAR экспортируются в файл MANIFEST.MF.
Проект Eclipse Bundle Recipe предоставляет Maven-подход для добавления метаданных OSGi в JAR-файлы, используемые в репозитории Maven.
По своей сути он использует инструмент bnd. Этот инструмент похож на швейцарский армейский нож. Он анализирует файлы jars и class и правильно рассчитывает импорт и экспорт пакетов. Вы должны использовать bnd для конвертации собственных jar-файлов. Это доступно в Maven Central.
Позднее прибытие на вечеринку:
Если вы используете Gradle, вы можете добавить jar как обычную зависимость вашего проекта, если примените подключаемый модуль osgi-run.
Плагин osgi-run будет прозрачно упаковывать банку в пакет для вас, экспортируя каждый пакет в нем и вычисляя весь его импорт. Поскольку Gradle будет знать переходные зависимости фляги, он сделает то же самое для них, если это необходимо.
Банки будут частью OSGi runtime, которые вы можете запустить с помощью gradle runOsgi
или же gradle createOsgi
затем выполнить либо run.sh
или же run.bat
скрипты.
Фактически обертка сделана Bnd, швейцарским ножом в мире OSGi, конечно.
Если вы хотите настроить, как происходит перенос (что обычно нужно импортировать / экспортировать), вы можете легко это сделать в файле сборки Gradle, подробности см. В документации.
Пример:
wrapInstructions {
// use regex to match file name of dependency
manifest( "c3p0.*" ) {
// import everything except the log4j package - should not be needed
instruction 'Import-Package', '!org.apache.log4j', '*'
instruction 'Bundle-Description', 'c3p0 is an easy-to-use library for making traditional ' +
'JDBC drivers "enterprise-ready" by augmenting them with functionality defined by ' +
'the jdbc3 spec and the optional extensions to jdbc2.'
}
}