Почему сторонние зависимости требуются исключительно из контейнера OSGi, даже если они есть в моих зависимостях maven? - PullRequest
0 голосов
/ 30 июня 2018

Я хочу знать, почему OSGi не уважает зависимость от mavenis.

Я хочу создать одно приложение в OSGi (AEM). Я хочу общаться (CRUD) с базой данных с помощью JPA (eclipselink).

Я создал проект maven с aem-archetype.

Добавлены все необходимые зависимости (JPA) в pom-файл моего проекта maven. В Eclipse нет ошибок, я создал проект через mvn clean install и установил его в AEM (CQ5) через mvn sling:install. Все хорошо до сих пор. Нет ошибок.

Но когда я иду и вижу свой комплект в консоли felix, я вижу, что это не Актив , а в Установлено состояние. Сообщается об ошибке, что он не может разрешить javax.persistence пакет. Я был озадачен, я искал и читал об этом здесь -

Вы должны убедиться, что вы помещаете ту же версию в другую связать и развернуть в первую очередь. https://forums.adobe.com/thread/2325007

Я преобразовал JPA jar в комплект OSGi и установил его в свой контейнер OSGi, и ошибка исчезла. Отлично!

Но почему OSGi не следит за зависимостями, которые я написал в pom.xml моего проекта maven. Зачем нужен JPA строго из комплекта OSGi?

Может быть, это связано с какой-либо архитектурной выгодой, но не мог бы кто-нибудь объяснить мне здесь такое поведение OSGi? И почему / как эта функция OSGi полезна?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Причина: то, что вы добавляете, когда зависимость добавляется в путь сборки вашего проекта и становится доступной для ваших классов. Когда вы запускаете mvn install, он проверяет наличие всех зависимостей и создает для вас пакет / jar. По умолчанию этот пакет содержит только классы вашего проекта, а не другие зависимости. Вам нужно проверить в depfinder, есть ли уже внешние зависимости в контейнере OSGi, если нет необходимости загружать их в контейнер OSGi, либо встраивая внешние зависимости в ваш пакет с помощью maven-bundle-plugin, присутствующего в pom.xml, или с помощью создание пакета jar-файла (я не рекомендую этого), который вы сделали.

Надеюсь, это поможет!

0 голосов
/ 01 июля 2018

Раздел <dependency> вашего Maven POM охватывает только ваши зависимости времени компиляции . Это означает, что когда вы запускаете Maven для сборки вашего проекта, эти зависимости используются для компиляции исходного кода и сборки вашего пакета. Сам Maven не знает ни о AEM, ни о OSGi, ни о какой-либо другой платформе или платформе (например, Spring).

Maven просто компилирует ваш код.

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

Что мы обычно делаем, это создаем модуль Maven пакета содержимого AEM и помещаем в него все необходимые сторонние зависимости (например, пакеты JPA). Этот пакет контента затем развертывается Maven, так что эти зависимости также доступны во время выполнения.

...