Вставить сторонний JAR с помощью BND - PullRequest
7 голосов
/ 26 сентября 2011

У меня есть пакет OSGi, который построен с использованием ANT и классического инструмента BND.Мой комплект использует внутреннюю библиотеку (JAR), которая недоступна в виде комплекта внутри моего контейнера OSGi (Apache Felix)Итак, я пытаюсь встроить его в свой пакет для доступа во время выполнения.

Как я могу встроить такую ​​библиотеку / JAR, используя ANT + BND?(Примечание: я не могу использовать MAVEN, с помощью которого это могло бы быть намного проще)

Ответы [ 2 ]

12 голосов
/ 26 сентября 2011

Вам нужно две инструкции в вашем bnd дескрипторе. Сначала используйте Include-Resource, чтобы включить целевой JAR в ваш пакет:

Include-Resource: foo.jar

Затем вам нужно указать, что foo.jar должен быть в пути к классам пакета. Я предполагаю, что само содержимое пакета также должно быть частью пути к классу пакета, поэтому мы должны также включить его в точку:

Bundle-ClassPath: ., foo.jar

Обратите внимание, что ответ @ seh о добавлении пакетов JAR в ваш пакет с помощью Private-Package также является правильным (в этом случае JAR должен быть виден в пути к классам во время сборки). Я бы никогда не использовал Export-Package для этого, потому что я думаю, что пакеты должны сохранять жесткий контроль над тем, сколько они экспортируют.

0 голосов
/ 26 сентября 2011

Существует поставляемая BND Ant-задача, которая называется "bndwrap" . Это не очень хорошо задокументировано. Когда я попытался его использовать, мне пришлось прочитать код Java , чтобы увидеть, что он делает. (См. метод bnd#doWrap() здесь .)

Напоминаю, что также возможно "встраивать" зависимый Jar-файл другим способом: не напрямую как Jar-in-a-Jar, а просто перетаскивая все его классы в ваш пакет, просто объявив в Private-Package Директива BND о том, что пакеты, предоставленные другим Jar-файлом, должны быть включены в ваш. Кроме того, вы можете упомянуть эти пакеты в директиве Export-Package, чтобы они оба включали в себя и экспорт.

...