Поддерживает ли Караф загрузку транзитивных зависимостей из maven central?
Я пытаюсь использовать Karaf, и мне было интересно, можно ли настроить его так, чтобы он извлекал транзитивные зависимости из центрального хранилища Apache Maven. Без использования "встроенных пакетов"
Я уже знаю, что вы можете получить явные зависимости, ключевая часть вопроса - "переходные".
Я также знаю, что вы можете использовать OBR для чтения из файла repository.xml на развернутом сайте, но я не могу найти его для Maven central. Возможным ответом на этот вопрос будет добавление URL-адреса, но я нигде не могу найти документально подтвержденный URL-адрес repository.xml.
На данный момент моя работа заключается в том, чтобы выяснить, каковы зависимости и явно добавить их в
Встроенные пакеты не работают с реализацией проекта Karaf OSGi (он просто ожидает чего-то, что не существует). Я также считаю уродливым делать это. Другой возможный ответ, который я могу придумать для этого вопроса, - если бы были инструкции по созданию пакета, который можно развернуть в любом контейнере OSGi (не только в Karaf с использованием файлов KAR), который содержит все необходимые зависимости.
3 ответа
Я нашел способ сделать это относительно стандартным способом OSGi, используя Maven. Он использует плагин maven-dependency-plugin для создания репозитория, который содержит только зависимости, которые требуются в области выполнения.
Затем выполняется цель maven-bundle-plugin:index для создания файла repository.xml.
На данный момент в цели у вас есть действительный репозиторий obr, maven-assembly-plugin может использоваться для его упаковки по мере необходимости.
Следующий фрагмент pom.xml сделает то, что требуется.
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-runtime-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<copyPom>true</copyPom>
<useRepositoryLayout>true</useRepositoryLayout>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>index</id>
<goals>
<goal>index</goal>
</goals>
<phase>verify</phase>
<configuration>
<mavenRepository>${project.build.directory}/dependency</mavenRepository>
</configuration>
</execution>
</executions>
</plugin>
Что касается Karaf, этот пакет вместе с его транзитивными зависимостями может быть установлен без использования файла feature.xml Karaf, используя следующие команды:
features:install obr
obr:addUrl [location of the OBR repository, can be file:///....]
obr:deploy [symbolicname-of-bundle]
start [symbolicname-of-bundle]
И вуаля.
Обратите внимание, что при этом будут загружены только те пакеты, на которые ссылается указанный вами пакет, поэтому, если вы используете что-то вроде Blueprint, в котором теоретически не должно быть информации о других пакетах, вам придется явно развернуть их или создать uber bundle, который будет содержать ваши комплекты (например, функцию / продукт)
Вы можете использовать плагин karaf-maven-для создания файла объектов из зависимостей maven. Это разрешит переходные зависимости.
Насколько я знаю, лучшее, что вы можете сделать, это использовать Maven для загрузки всех зависимостей, а затем использовать плагин Felix bnd для преобразования вашего локального (или удаленного) хранилища в OBR, который вы можете использовать с Karaf.