Как начать с OSGi

На моем рабочем месте они попросили меня изучить фреймворк OSGi и решить, как лучше всего с ним работать.

В последние две недели я занимался серфингом в Интернете и обнаружил множество различных подходов к работе с OSGi, например, я нашел подход OSGi enRoute и плагин Eclipse под названием BndTools. Я обнаружил, что могу просто использовать декларативные сервисы или фреймворк, такой как AIOLOS.

Я немного запутался во всех этих разных подходах и технологиях... Как вы думаете, что является лучшим подходом для начала работы с OSGi для начинающих? Есть ли реализация, которая лучше, чем другие (например, Equinox)? Есть ли у вас предпочтительный подход для работы с этой структурой?

Заранее большое спасибо!

2 ответа

Я могу понять путаницу... существует множество инструментов для сборки, и в настоящее время все они поддерживают OSGi. Поскольку иногда вам нужны комбинации инструментов, пространство сложное.

BND

Чтобы использовать OSGi, вам нужно собрать пакеты. Пакет - это файл JAR, формат по умолчанию для библиотек / исполняемых файлов Java. Они являются связками, когда манифест в файле JAR содержит метаданные OSGi. Эти метаданные предоставляют информацию для инструментария и платформы OSGi, какие возможности требуются от среды выполнения и какие возможности она предоставляет для среды выполнения. Эта информация используется для сборки времени выполнения, а также для проверки во время выполнения, что все совместимо.

Хранение этой информации вручную - это много тошнотворной работы. По этой причине я разработал bnd уже около 19 лет назад. В настоящее время bnd является основной библиотекой в ​​отрасли, которая создает эти метаданные, упрощает оформление метаданных и проверку достоверности метаданных. Это делает обширный анализ и аннотации связки, чтобы минимизировать ручную работу.

В случае bnd он также поддерживает стандартные аннотации сборки OSGi для декларативных сервисов, аннотаций Manifest и многого другого. (Многие стандарты OSGi возникли в bnd.)

IDE и непрерывная интеграция

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

Понятно, что крайне важно, чтобы при разработке программного обеспечения на ноутбуке результаты были идентичны при сборке на сервере. По этой причине bnd предоставляет библиотеку, которая может использоваться в IDE и различных инструментах сборки. Хотя существует множество возможных комбинаций с bnd, есть несколько самых популярных.

модели

Только Maven

Maven - это популярный инструмент для сборки Java-приложений. Он определяет всю информацию о сборке в файлах POM (Project Object Model), которые являются файлами XML. POM могут наследоваться от других POM. Каждый POM (и артефакт) идентифицируется идентификатором группы, идентификатором артефакта и непрозрачной версией. Maven имеет довольно фиксированную структуру для проекта. Вся работа по сборке выполняется с помощью плагинов, которые получают свою конфигурацию из POM.

Существует два плагина Maven, основанных на bnd, которые обеспечивают необходимую генерацию метаданных OSGi.

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

Существует третий плагин Tycho, который создает пакеты с использованием модели Eclipse PDE. Я слышал, что мало кто рекомендует посещать PDE/Tycho сегодня, это не было безболезненным развитием, и многие пользователи PDE ищут альтернативы. Этот плагин должен преодолеть очень большой смысловой разрыв между PDE и Maven.

Gradle Only

Хотя Gradle также использует плагины для всей низкоуровневой работы, он в значительной степени полагается на Groovy для обеспечения действий по сборке.

Группа bndtools предоставляет плагин, который упрощает генерацию метаданных OSGi в обычной сборке Java:

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

Eclipse, M2E, Maven и Bndtools

В этом квартете Eclipse является основной IDE, а M2E - плагином, который учит Eclipse, как создавать пакеты в соответствии со спецификацией maven (pom-файл). В этом квартете bnd работает в Maven как плагин. Bndtools предоставляет некоторые дополнительные функциональные возможности OSGi IDE, которых нет в M2E. Основное внимание уделяется созданию сборок для среды выполнения OSGi и просмотру пакетов.

В этой модели вся информация о сборке хранится в POM Maven. Это модель, которую Б. Дж. Харгрейв в другом ответе на этот вопрос разместил.

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

Eclipse, Bndtools, Gradle

Другой моделью, которая была разработана специально для OSGi / bnd, является модель рабочего пространства bnd. В этой модели рабочее пространство - это каталог с пакетными проектами OSGi, специальный каталог (cnf) содержит информацию о рабочей области. Вся информация о сборке хранится в bnd файлы, которые являются старыми добрыми файлами свойств Java.

Eclipse / Bndtools и Gradle (и в этом отношении Ant!) Имеют плагины, которые читают информацию в рабочей области и каталогах проектов и учат их соответствующие инструменты сборки, где находятся источники, где должны храниться двоичные файлы и т. Д. Плагины для этих инструментов использование bnd делает все возможное, чтобы результаты сборки были идентичными.

Исходный архив OSGi enRoute был основан на этой модели. Несмотря на то, что он заархивирован, он все еще является основной моделью для Bndtools и используется многими компаниями. На EclipseCon 2018 есть несколько презентаций об этой модели:

Это также модель, которую OSGi использует сама для создания спецификационных JAR-файлов, эталонных реализаций и комплектов Compliance Test.

Модель рабочего пространства bnd - единственная модель, которая поддерживает все стандарты репозитория. Это включает в себя репозитории Maven (Maven Central!), Стандарт репозитория OSGi, репозитории Eclipse P2, репозитории на основе каталогов и даже репозитории на основе POM. Поддержка внешних репозиториев в модели рабочего пространства bnd чрезвычайно гибкая.

Когда начать?

Как правило, разработчики, которые запускаются в OSGi, уже имеют опыт работы с Java. Как правило, это приводит к их выбору инструмента, поскольку он уже унаследован.

Если вы можете начать с чистого листа, тогда моё личное предпочтение - это модель рабочего пространства bnd. При этом приоритет отдается среде IDE, в которой вы проводите большую часть своего времени, и в то же время обладаете исключительно хорошей точностью при непрерывной интеграции. За последние 2 года я помог компании начать с OSGi с нуля на основе этой модели рабочего пространства, и я весьма впечатлен тем, как они смогли воспользоваться преимуществами OSGi без какого-либо предварительного опыта намного быстрее, чем я когда-либо видел раньше.

Существует краткое руководство по началу работы, обширное базовое руководство, руководство по удаленной отладке, если вы работаете с IoT, и руководство по распределенным системам.

Начните с OSGi enRoute. В нем будет рассмотрено использование Bndtools в качестве IDE. Он уже использует плагины Bnd maven для создания пакетов и демонстрирует использование декларативных сервисов для кодирования предоставления и использования сервисов.

Другие вопросы по тегам