Как преобразовать jar в пакет OSGi с помощью eclipse и bndtools

Я ищу пошаговое руководство по преобразованию jar в пакет OSGi с помощью плагина eclipse bndtools. Я знаю, что это можно сделать с помощью bnd, используя командную строку, но было бы неплохо узнать, как сделать то же самое через IDE.

Я мог что-то упустить, но это руководство только объясняет, как создать проект с нуля.


person Joly    schedule 22.03.2012    source источник


Ответы (3)


Для этого следуйте статье Создание подключаемых модулей Eclipse (пакетов OSGi) из стандартного jar. Хотя этот подход не использует Bnd, вы сможете достичь того, чего хотите.

Короче говоря, вы можете сделать следующее:

  1. Создайте новый проект плагина, выбрав File-> New -> Project...-> Plug-in Development -> "Plug-in from Existing JAR Archives"

  2. Выберите банки, которые вы хотите иметь в этом новом плагине (комплекте). Введите другие данные плагина (имя, версия, идентификатор и т. д.).

  3. Снимите флажок Unzip the JAR archive into the project. Нажмите, затем закончите.

Снятие флажка Unzip the JAR archive into the project предотвращает извлечение файлов классов из Jar, что обычно не требуется.

РЕДАКТИРОВАТЬ: экспортировать пакет для его установки в среду выполнения OSGi. Выберите свой пакет и выберите File -> Export -> Plug-in Development -> "Deployable plug-ins and fragment".

Снимите флажок, чтобы экспортировать источник.

person Kuldeep Jain    schedule 22.03.2012
comment
Следует отметить, что, хотя это делает именно то, что хотел выполнить OP, для него не требуется плагин BND. Это стандартное затмение. - person Robin; 22.03.2012
comment
Спасибо. Теперь, когда я создал проект с помощью jar импорта, как мне экспортировать его как пакет OSGi? - person Joly; 22.03.2012
comment
Откройте файл MANIFEST.MF и убедитесь, что все необходимые пакеты экспортированы на вкладке Runtime. Также прочитайте Использование проекта нового плагина в статье, которую я упоминал. - person Kuldeep Jain; 22.03.2012
comment
Все действительно есть, но как мне экспортировать его в виде jar-файла, так как мне нужно установить его в другой контейнер OSGi, не связанный с Eclipse? - person Joly; 22.03.2012
comment
Имейте в виду, что, поскольку этот подход не использует Bnd, вам придется вручную добавить оператор Import-Package для пакета, который вы упаковываете. Пока вы этого не сделаете, пакет, скорее всего, вылетит во время выполнения с ошибками NoClassDefFoundErrors и т. д. Bndtools имеет аналогичную функциональность с тем преимуществом, что также создает зависимости через bnd... к сожалению, я еще не успел задокументировать это. - person Neil Bartlett; 23.03.2012
comment
Downvoter: Пожалуйста, объясните свое отрицательное голосование. Мне нужно знать, если что-то не так с моим ответом. - person Kuldeep Jain; 24.03.2012
comment
@KuldeepJain Я уже объяснил выше. Кроме того: ваш ответ на самом деле не отвечает на заданный вопрос. - person Neil Bartlett; 25.03.2012

  1. Просто создайте новый проект в bndtools для всех (или связанных) jar-файлов, которые вы хотите преобразовать.
  2. Дайте этому проекту имя, которое будет префиксом символического имени пакета преобразованных банок. Например. если ваша компания acme, назовите проект com.acme
  3. Загрузите jar и исходники в каталог jar
  4. Создайте новый дескриптор пакета с записью -classpath (файл/новый/дескриптор пакета), например:

-classpath: jar/htmlcleaner-2.2.jar, jar/htmlcleaner-2.2-src.zip

Export-Package: org.htmlcleaner.*;version=1.0

Import-Package: org.apache.tools.ant;resolution:=optional,\

org.jdom;resolution:=optional,\

*

Bundle-Version: 2.2.1

Сохранив этот файл, загляните в сгенерированную директорию, вуаля, там ваш бандл! Вы можете повторно использовать один и тот же проект для любого количества пакетов, которые хотите обернуть.

Затем вы можете выпустить пакет в один из репозиториев. Выберите файл bnd.bnd и выберите Release Bundle в контекстном меню.


Редактировать: NB. Вы не можете напрямую использовать проект "переноса" из других проектов, так как для работы Eclipse требуется исходное дерево. Для этого есть 2 обходных пути:

  • Поместите упакованный пакет в репозиторий и используйте его оттуда (как описано выше)
  • Распаковать исходное дерево в папку src проекта

https://github.com/bndtools/bndtools/wiki/How-to-Wrap-Bundles

person Peter Kriens    schedule 23.03.2012
comment
Я обновил ваш ответ, включив в него предостережение, упомянутое в вики bndtools. - person Matt Crinklaw-Vogt; 05.06.2013

В дополнение к существующим ответам вас может заинтересовать этот сообщение в блоге., в котором объясняется, как создать этот пакет OSGi из jar-файла с помощью «чистого maven», т.е. без необходимости использования специальной среды IDE и/или плагинов. (Если быть точным, то под капотом снова bnd with делает настоящую работу ;))

person evandor    schedule 16.01.2014