Как я могу управлять зависимостями сборки OSGi?

StackOverflow https://stackoverflow.com/questions/27818

  •  09-06-2019
  •  | 
  •  

Вопрос

Мы встроили среду выполнения OSGi (Equinox) в наше клиент-серверное приложение, чтобы облегчить разработку плагинов, и пока все идет отлично.Мы использовали Eclipse для создания плагинов благодаря встроенному редактору манифестов, управлению зависимостями и мастеру экспорта.Использование Eclipse для управления сборками не очень способствует непрерывной интеграции через Hudson.

У нас есть пакеты OSGi, которые зависят от других пакетов OSGi.Мне бы очень не хотелось жестко запрограммировать порядок сборки в пользовательской сборке ANT.Мы сделали это в прошлом, и это довольно ужасно.Есть ли какой-нибудь инструмент сборки, который может ЛЕГКО управлять зависимостями OSGi, если не автоматически разрешать их?Есть ли ДОСТОЙНЫЕ примеры того, как это сделать?

РАЗЪЯСНЕНИЕ:

Сгенерированные сценарии сборки можно использовать только через Eclipse.Они требуют ручного запуска частей Eclipse.У нас также есть некоторые стандартные цели, которых не будет в сборке Eclipse, и я не хочу изменять сгенерированный файл, так как я могу повторно сгенерировать (я знаю, что могу включать в себя, но я хочу избегать создания файла Eclipse вообще). вместе)

Вот макет моего проекта:

/
-PluginA
-PluginB
-PluginC
.
.
.

При использовании Eclipse PDE у каждого плагина есть манифест, но нет файла build.xml, поскольку PDE делает это за меня.Трудно автоматизировать процесс, управляемый графическим интерфейсом, с помощью Hudson.Я хотел бы настроить свой собственный build.xml для сборки каждого из них, НО есть зависимости и проблемы с порядком сборки.Эти проблемы вызваны файлами манифеста (которые описывают импорт OSGi).Например, PluginC зависит от PluginB, который зависит от PluginA.Они должны быть построены в правильном порядке.Я понимаю, что могу вручную контролировать порядок сборки, и я ищу инструмент, который поможет автоматизировать управление зависимостями порядка сборки.

Это было полезно?

Решение 4

Закрываю старые вопросы...

Наша установка не подходила для maven из-за отсутствия сетевого подключения и времени.Я знаю, что существуют автономные настройки Maven, но с учетом времени это было слишком много.Надеюсь, мы сможем использовать правильную настройку, когда у нас будет время реорганизовать процесс сборки.

Решение включало Ant, BND и некоторые специальные задачи ant.Различные зависимости пакета управляются вручную.Мы уже использовали Ant;БНД и специальные задачи связали все это воедино.Специальные задачи просто обеспечивали синхронизацию наших проектов bnd/eclipse.

Другие советы

Maven2 полностью;имеет плагин Eclipse под названием m2eclipse чтобы помочь с управлением, решает именно проблему зависимостей, а затем и некоторые другие.Имеет бесплатная онлайн-книга в качестве документации.

Конкретно посмотрите многомодульные проекты для объединения множества компонентов вместе и заставить Maven определить порядок сборки и зависимости.

Существует также глава об интеграции Eclipse.

И это только Eclipse и Maven, далее вас ждут кое-что интересное для OSGi:

  • А Плагин Apache Felix BND Maven автоматически сгенерирует ваши манифесты или, по крайней мере, поможет вам
  • А Проект PAX OPS4J и их плагины Maven могут оказаться отличным подспорьем при загрузке проектов, предоставлении средств запуска и т. д.

И по сути, модель модуля Maven идеально сочетается с моделью пакета OSGi.Мы создаем и управляем множеством продуктов с сотнями пакетов с использованием Maven уже более 3 лет, и это здорово.

Поддержка Maven2.Обратите внимание на плагины Tycho для сборки — они используют JDT-компилятор Eclipse, поэтому он реализует все правила OSGi во время компиляции, так же, как Eclipse это делает во время выполнения.

Альтернативно, плагины Apache Felix BND также кажутся популярными.Я предпочитаю Tycho, потому что он более тесно объединяет среды разработки Maven и Eclipse.

Мы используем Бакминстер.Это среда сборки и сборки, которая отвечает за разрешение зависимостей, выборку из различных репозиториев, сборку и упаковку продукта.

Это проект Eclipse Tools.Он хорошо интегрируется с PDE.

Это означает, что все метаданные, которые мы используем для создания RCP, будут полезны Бакминстеру для разрешения и построения.Например, Feature.xml и заголовок Require-Bundle в Manifest.MF, .product.

Сейчас у нас нет скриптов сборки в каждом пакете;теперь у нас есть одна сборка для каждого продукта.Бакминстер тщательно просматривает граф зависимостей.

Потребовалось немного усилий, чтобы заставить нашу существующую систему круиз-контроля/муравья работать с ним, хотя они (команда Бакминстера) начали использовать Hudson для размещения самого проекта.Я считаю, что их настройки сборки также доступны для скачивания.

Мы действительно впечатлены этим проектом, несмотря на то, что он находится в относительном зачаточном состоянии.

Мы также рассмотрели Пакс-Конструкт но мы не хотели использовать Maven.

Мы также сейчас рассматриваем Платформа тестирования Spring DM для увеличения усилий по модульному тестированию.

PDE Безголовая сборка.Это хорошо документировано Eclipse.Если вы создаете плагины Eclipse и хотите сделать это через командную строку, то безголовая сборка Eclipse PDE — это то, что вам нужно.

Можете ли вы уточнить, где возникает проблема?Вы упоминаете зависимости пакета OSGi.Это во время выполнения?Или во время компиляции?В первом случае вам следует рассмотреть возможность использования декларативных служб (см. спецификацию OSGi).

Мы используем Hudson в сочетании с PluginBuilder для создания наших пакетов/плагинов OSGi на базе Eclipse.Это основано на стандартном процессе PDE Eclipse для создания плагинов.Это означает использование Eclipse в качестве компилятора.

Maven не требует подключения к Интернету!Ради бога, используйте ключ -o.

Я использую мавен 3.0.2

mvn генерировать: архетип

select 252 - osgi-archetype
mvn idea:idea

видеть http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

чтобы добавить ваши зависимости в пакет, используйте этот короткий пример в pom.xml

<Export-Package>org.foo.myproject.api</Export-Package>

или

<Import-Package>org.foo.myproject.api</Import-Package>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top