Подтвердить что ты не робот

Использование библиотеки non-osgi в приложении osgi

Можно ли использовать библиотеку non-osgi с приложением OSGi?

В качестве примера я разрабатываю семантическую поисковую систему, и я использую для нее стороннюю библиотеку обработки естественного языка (http://wiki.opencog.org/w/RelEx_Dependency_Relationship_Extractor).

Возможно ли связать такую ​​библиотеку, которая не поддерживает OSGi, как пару файлов jar, с моим приложением OSGi?

4b9b3361

Ответ 1

Как было написано в предыдущих ответах, у вас есть два варианта, если вы хотите использовать дополнительные библиотеки в своих пакетах:

  • вложение библиотек в пакет, в котором он будет использоваться,
  • создание допустимого пакета OSGi из библиотеки.

первый подход проще, потому что вам нужно только скопировать библиотечные банки (и все его зависимости) в пакет (например, в корневой каталог), а затем добавить их в элемент Bundle-Classpath в MANIFEST.MF (см. здесь). Однако при этом вы должны помнить, что эта добавленная библиотека будет видна только в комплекте, в который она встроена (поэтому повторное использование библиотеки ограничено). Вы всегда можете добавлять пакеты из этой библиотеки в элемент Export-package в MANIFEST.MF, чтобы сделать ее видимой для других пакетов, но это далеко не изящное решение (однако оно будет работать).

Чтобы сделать его видимым для других пакетов, вы должны использовать второй подход, т.е. создать пакет из OSGi из библиотеки (есть инструменты, которые могут помочь вам в этом, также в Eclipse), Однако для более сложных библиотек этот подход может быть более сложным (из-за зависимостей и подхода к загрузке классов в OSGi).

Итак, если вы хотите использовать библиотеку только в одном комплекте, я предлагаю использовать первый подход (его проще реализовать). Если вы хотите использовать эту библиотеку во многих пакетах в своем приложении, вы должны рассмотреть второй подход.

Ответ 2

Да, вы можете вставлять внешнюю библиотеку в свой пакет или оболочку ( "OSGIfy" ) в библиотеку в виде пакета OSGi. Для обоих вариантов Pax Construct (http://www.ops4j.org/projects/pax/construct) является хорошим инструментом.

Если ваша внешняя библиотека сама имеет зависимости, вставьте все это в один пакет или используйте Pax Construct для их переноса.

Если вам нужно выбирать между упаковкой или вложением, рассмотрите управление зависимостями и управление версиями пакетов. Если вам необходимо обновить внешнюю библиотеку и встроить ее в свой собственный пакет приложений, вы всегда выпускаете как библиотеку, так и свой собственный код. Например, также невозможно иметь 2 версии библиотеки, если у вас нет 2 версии вашего пакета приложений. А также... если вы не работаете в среде OSGi, вы хотели бы добавить сторонние классы в свои приложения? Итак, зачем это делать в среде OSGi?

Я лично предпочитаю в таком случае видеть внешнюю библиотеку как черный ящик и обертывать библиотеку и ее зависимости в одном пакете.

Ответ 3

Да, это возможно. У вас есть два варианта:

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