Разрешение OSGi (Karaf) против зависимостей Maven

В моем примере ниже, похоже, есть несоответствие/дублирование в необходимых шагах в разрешении OSGi и поддержке зависимостей Maven.

У меня есть jar, который зависит от внешнего стороннего jar, в данном случае time4j.

<dependency>
  <groupId>net.time4j</groupId>
  <artifactId>time4j-core</artifactId>
  <version>4.16</version>
</dependency>

Затем я могу запустить свою простую банку локально, импортировав пакеты и запустив и т. д.

При импорте в OSGi я должен убедиться, что этот jar-файл импортируется первым, часто с использованием URL-адреса PAX Wrap.

Это нормально для 1 jar-зависимости, но как насчет нескольких зависимостей. Я мог бы использовать файл functions.xml для сбора этих банок, но зачем? Я уже указал их в своем pom.xml.

Кажется, у OSGi/Karaf должен быть способ прочитать зависимости pom.xml и импортировать их в контейнер, используя URL-адрес PAX Wrap, когда это необходимо.

Я что-то пропустил здесь?


person IanWatson    schedule 10.05.2016    source источник
comment
И как бы вы справились с зависимостями только во время сборки?   -  person Neil Bartlett    schedule 10.05.2016
comment
Использование предоставленного объема.   -  person IanWatson    schedule 10.05.2016
comment
Другая ситуация может быть, когда у вас есть сторонняя банка, которая зависит от других сторонних банок. В этой ситуации вам придется самостоятельно пройти все зависимости сторонних jar-файлов и создать либо файл функций, либо установить их вручную.   -  person IanWatson    schedule 10.05.2016


Ответы (1)


Извините, но ваши ожидания не совпадают с реальностью. Прежде всего, зависимости Maven — это зависимости времени сборки. Вот почему вы объявляете зависимости, которые, как вы знаете, доступны во время выполнения, как это предусмотрено

<scope>provided</scope>

Ни OSGi, ни Karaf ничего не могут сделать с вашими зависимостями времени сборки. НО с OSGi вы можете быть уверены, что ваши зависимости сборки также доступны в вашей среде выполнения и не мешают другим библиотекам, которые могут быть доступны.

Вот почему вам необходимо декларировать свой импорт и экспорт и т. д.

Karaf поможет вам с некоторыми зависимостями, например, с файлами функций. Если у вас есть проект maven с определением функций, все ваши зависимости области компиляции могут быть включены в один файл функций.

НО, преобразователь OSGi просматривает только доступные на данный момент пакеты и ничего более, никакой связи с maven, если вы хотите иметь какое-то автоматическое разрешение внешних зависимости, которые вам необходимо убедиться, что у вас есть
а) включенный преобразователь OBR (это зависит от используемой вами версии karaf, в 4.x он уже включен) и
б) репозиторий OBR под рукой, Karaf В этом случае Cave будет проектом, который нужно искать, потому что он может находиться как прокси поверх репозитория maven.

person Achim Nierbeck    schedule 11.05.2016