Поддерживает ли Караф загрузку транзитивных зависимостей из 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.

Другие вопросы по тегам