Преобразование существующей JAR в OSGi-bundle

У меня есть файл JAR, который мне нужно преобразовать в пакет OSGi. У меня нет исходного кода для файла JAR.

Я попытался использовать ответы из:как создать пакет OSGi из библиотеки jar?

тем не менее, они довольно устарели.

Edit: мне нужно преобразовать несколько, но фиксированное количество банок.

4 ответов


1 - используйте bnd-платформа для создания пакетов OSGi при ожидании частых дополнений / обновлений Jars или при получении зависимостей из репозиториев Maven

мы используем:bnd-платформа (Я также автор) для управления зависимостями третьих лиц и создания пакетов OSGi из них. Вы можете использовать его как с зависимостями, полученными из репозиториев Maven, так и с локальными банками (см. README). Если вы регулярно добавляйте или обновляйте свои зависимости я бы посоветовал вам попробовать bnd-платформа. Это плагин для Gradle, вы можете легко начать с этот шаблон - просто добавьте файлы Jar и укажите конфигурацию, как описано в проекте README (bundle symbolic names, versions), и запустите gradlew bundles.

2 - используйте bnd для создания пакетов OSGi, когда вы делаете это один раз или дополнения/обновления редко

если вы делаете этот процесс только один раз или редко, простой способ создать пакет OSGi из существующей банки-напрямую использовать bnd в командной строке. Единственное, что вам нужно, это Java и BND jar. Вы можете использовать wrap попытаться автоматически обернуть банку или создать С инструкции для bnd (например, для экспорта только определенных пакетов).

пример .БНД файл:

-classpath: lib/trove-2.0.4.jar
-output: gnu.trove-2.0.4.jar
Export-Package: *;-split-package:=merge-last;-noimport:=true
Import-Package: *
Bundle-Version: 2.0.4
Bundle-Name: GNU Trove Collections Plug-in
Bundle-SymbolicName: gnu.trove

пример вызова:

java -jar <path to bnd>.jar trove-2.0.4.bnd

Банка bnd загрузка больше не предлагается непосредственно через веб-сайт, хорошей альтернативой является загрузите его из Maven Central.


на Рецепт Пакета Eclipse проект предоставляет подход на основе Maven для добавления метаданных OSGi в банки, потребляемые из репозитория Maven. Несмотря на название, он не использует Eclipse.

в своей основе он использует инструмент bnd. Этот инструмент похож на швейцарский армейский нож. Он анализирует банки и файлы классов и правильно вычисляет импорт и экспорт пакетов. Вы должны использовать bnd для преобразования собственных банок самостоятельно. Это доступно в Maven Центральный.


Если вы используете Maven, вы можете использовать плагин Maven Bundle для встроенных или встроенных зависимостей в пакет OSGi:

http://felix.apache.org/documentation/subprojects/apache-felix-maven-bundle-plugin-bnd.html#embedding-dependencies


или просто используйте osgi: установите с опцией wrap, как показано ниже.

osgi:install wrap:file:/u01/repository/com/oracle/ojdbc6/11.2.0/ojdbc6-11.2.0.jar

это развернет файл jar как пакет, и вы можете получить пакет в разделе "$fuse_home/data/cache/bundle{id}/version0.0 " папка.