Конфликты возможностей OSGI Bundle Repository (OBR) во время разрешения OBR в Apache Felix
Я изучаю использование OBR в Феликсе в качестве варианта развертывания для большого приложения, но столкнулся с некоторыми начальными препятствиями.
Принятый подход
- Я создал новый файл jar с manifest.mf, в котором перечислены все зависимости приложений (в основном все в ручном развертывании) вплоть до сторонних библиотек в разделе "Require-Bundle:". Мое намерение состояло в том, чтобы сначала объявить все, а затем выполнить сопряжение и разрешить сторонние пакеты, разрешенные через OBR.
Индексировал мой локальный репозиторий.m2 как OBR, используя maven-bundle-plugin
mvn org.apache.felix:maven-bundle-plugin:2.3.7:index
Запустил Apache Felix и добавил репозиторий OBR
obr:repos add file:///~/.m2/repository/repository.xml
Попытка развернуть jar-файл, содержащий весь список зависимостей пакета приложения
obr:deploy --required-only --start com.conorjgall.application.definition
Проблемы
В некоторых пакетах javax.inject есть требование к пакету из-за использования инъекции зависимостей в Spring. Тем не менее, в OBR есть более одного пакета, объявляющего о возможности javax.inject. Он доступен как в комплекте Spring, так и в пакете Google Guice. К сожалению, распознаватель OBR, похоже, выбрал реализацию Guice, которая мешает запуску моего приложения.
Временное решение
Если я удаляю библиотеку Guice из индекса OBR, распознаватель OBR никогда не находит ее, поэтому используется реализация Spring, и приложение запускается без проблем.
Вопросы
- Я перечислил все зависимости в jar приложения высокого уровня, включая ту, что содержит реализацию javax.inject в Spring. Почему распознаватель OBR Феликса пытается разрешить требование пакета, когда я прямо сказал ему развернуть пакет, который уже предоставляет его? Происходит ли разрешение OBR в глубину, когда я пытаюсь развернуть его таким образом (используя один пакет)?
- Мне любопытно, какова стратегия, обычно используемая для создания / поддержки OBR-репозиториев сторонних библиотек, чтобы гарантировать отсутствие конфликтов возможностей пакетов. Следует ли создавать и поддерживать меньшие индексы репозитория OBR, которые содержат только зависимости приложений и не допускают конфликтов возможностей пакетов? Есть ли плагин Maven, который может помочь?
- Как более широкое сообщество развертывает>100 пакетов одновременно через OBR? Возможно, есть лучшие варианты, чем решение родительского пакета.