#java #osgi #osgi-bundle #apache-felix #bndtools
#java #osgi #osgi-bundle #apache-felix #bndtools
Вопрос:
Я видел, что есть какое-то сообщество osgi.enroute
, equinox
и etc поощряют bndtools для osgi bundle. Однако есть много специальных ключей, которые я никогда не видел и не могу найти на их официальном сайте. Например,
Require-Capability:
osgi.service;filter:="blahblahblah";effective:=active
Provide-Capability: osgi.service;objectClass=net....
И иногда делают что-то вроде
META-Persistence:
Webcontext-path:
Хорошо, откуда эта документация? Кто, черт возьми, знает, если при таком размещении он будет автоматически искать? Что означает, что я ставлю JDBC-Driver
, тогда он будет искать?
Есть ли у них какие-либо шпаргалки или документы bndtool, которые могут ссылаться на все это.
Насколько я знаю, плагин maven felix помог нам красиво объединить частный экспорт и импорт. Зачем я хочу перейти на bndtools?
И я вижу, что apache karaf (популярная среда выполнения OSGI) все еще использует плагин felix maven, который более понятен и понятен.
Является ли это причиной того, что OSGI до сих пор остается менее популярным, чем другие JAVA-фреймворки? Могу ли я по-прежнему придерживаться пакета плагинов maven Felix вместо использования этих сложных инструментов?
Ответ №1:
В новейших примерах enroute используется сборка maven. Таким образом, они не сильно отличаются от сборок apache karaf. Для создания пакетов с maven у вас есть два варианта. Maven-bundle-plugin (от felix) и bnd-maven-plugin от сообщества bnd.
Оба используют bnd под капотом, поэтому у них есть только небольшие различия. bnd-maven-plugin использует bnd.bnd по умолчанию для конфигурации. maven-bundle-plugin также может использовать этот стиль конфигурации. Я вижу тенденцию, что многие проекты используют bnd-maven-plugin, поскольку он более актуален для версий bnd, но вы можете использовать оба.
Реальные различия связаны с созданием артефакта развертывания. В bndtools вы создаете jar из файла bndrun, в то время как в karaf вы обычно создаете файл функций. Здесь вам действительно нужно решить, каким путем вы идете. Если вы используете автономный jar для своего приложения, то bndtools — отличный выбор. Если вы планируете развертывание в karaf, то функции karaf — лучший выбор.
Кстати. В обоих случаях плагин bndtools для eclipse обеспечивает некоторую хорошую поддержку. Особенно хорошо поддерживается просмотр манифеста jars и поддержка редактирования файлов bnd.bnd.
Что касается конфигураций, необходимых в файле bnd.bnd. Эти конфигурации необходимы таким же образом, если вы используете felix maven-bundle-plugin.
Хорошей новостью является то, что если вы используете новейшие спецификации / примеры, вам редко приходится касаться bnd.bnd или конфигурации плагина в maven. Есть аннотации практически для каждой необходимой конфигурации. Внутри самих спецификаций OSGi есть хорошая документация, но самый простой подход — начать с примеров.
Комментарии:
1. Приятно знать, что функция karaf и плагин maven bundle все еще поддерживаются, поскольку я предпочитал придерживаться хорошо известных вспомогательных инструментов 🙂 Однако, есть ли у вас какие-либо ссылки на документы о том, как работает пакет аннотаций OSGI?
2. Здесь много полезной информации, но было бы очень полезно, если бы вы предоставили ссылки на документ или примеры в своем ответе.
3. У меня есть пример ниже. Он также содержит некоторые дополнительные ссылки на ресурсы: github.com/cschneider/osgi-best-practices
4. @ChristianSchneider Как вы сгенерировали github.com/cschneider/osgi-best-practices/blob /… и github.com/cschneider/osgi-best-practices/blob/… Где находится ваша инструкция по экспорту и импорту пакета?
5. Вы используете плагин bndtools eclipse для создания требований. По большей части это просто означает перетаскивание пакетов верхнего уровня из представления репозитория слева в требования справа. Затем пакеты выполнения создаются с помощью разрешения (либо в пользовательском интерфейсе, либо через сборку maven). Экспорт пакетов создается с использованием аннотаций на github.com/cschneider/osgi-best-practices/blob/master/backend/… Импорт определяется автоматически с помощью bnd-maven-plugin.