Поддерживает ли Karaf загрузку транзитивных зависимостей из центра maven?

Я пытаюсь использовать Karaf, и мне было интересно, можно ли настроить его для извлечения транзитивных зависимостей из репозитория Apache Maven Central. Без использования «встроенных пакетов»

Я уже знаю, что вы можете использовать явные зависимости, ключевая часть вопроса - "транзитивные".

Я также знаю, что вы можете использовать OBR для чтения из файла репозитория.xml на развернутом сайте, но я не могу найти его для центра Maven. Возможным ответом на вопрос было бы добавление URL-адреса, но я нигде не могу найти его документально, что такое URL-адрес репозитория.xml.

На данный момент моя работа заключается в том, чтобы выяснить, каковы зависимости, и явно добавить их в

Встроенные пакеты не работают с реализацией плана Karaf OSGi (он просто ждет чего-то, чего не будет). Я тоже считаю некрасивым это делать. Еще один возможный ответ, который я могу придумать на этот вопрос, — если бы были инструкции по созданию пакета, который можно развернуть в любом контейнере OSGi (не только в Karaf, использующем файлы KAR), который содержит все необходимые зависимости.


person Archimedes Trajano    schedule 03.06.2012    source источник


Ответы (3)


Вы можете использовать karaf-maven-plugin для создания файла функций из зависимостей maven. Это разрешит транзитивные зависимости.

person Christian Schneider    schedule 03.06.2012
comment
снова я прошу пример, когда я сделал это вчера, я просто получаю NullPointerExceptions. Также в тексте моего вопроса прямо говорится, что я ищу что-то, что будет работать в ЛЮБОМ контейнере OSGi, а не только в Karaf. - person Archimedes Trajano; 03.06.2012
comment
Можете ли вы опубликовать свой пример проекта где-нибудь? Затем я могу взглянуть на него и проверить, почему вы получаете исключение Nullpointer. Это может означать, что где-то есть ошибка. Насколько я знаю, нет независимого от контейнера решения этой проблемы. Также убедитесь, что вы используете самую последнюю версию Karaf. В качестве примера вы можете посмотреть исходный код karaf в сборках/функциях. Он использует плагин karaf maven для создания собственных функций. - person Christian Schneider; 04.06.2012
comment
на самом деле для независимости от контейнера я бы подумал, что OBR сделает это, но я не нашел способа создать репозиторий OBR с транзитивными зависимостями, только с конкретными пакетами. - person Archimedes Trajano; 04.06.2012
comment
не стесняйтесь ответьте :) - person Archimedes Trajano; 04.06.2012
comment
До сих пор я мало что делал с репозиториями OBR, но технически они, конечно, лучше, чем maven. Практически я думаю, что на данный момент файлы функций karaf проще в использовании. О вашем проекте выше. Я проверил это и без проблем построил его с помощью maven. Кстати. Я нигде не видел ссылки на karaf-maven-plugin для создания там фичи. (Я использовал ветку появляющихся технологий. - person Christian Schneider; 04.06.2012
comment
Я вынул его. Я не мог заставить его работать, поэтому я не зафиксировал изменения. - person Archimedes Trajano; 05.06.2012
comment
Пожалуйста, добавьте его снова, чтобы я мог отладить дело. Вы можете использовать другую ветку, если хотите ее отделить. - person Christian Schneider; 06.06.2012
comment
Я действительно обнаружил проблему с использованием плагина функций. Похоже, это связано с зависимостью ‹groupId›org.jboss.spec‹/groupId› ‹artifactId›jboss-javaee-6.0‹/artifactId›, которая вызывает исключение нулевого указателя. К сожалению, если я не использую это (т.е. использую javax.javaee-api), то в отчете maven-Checkstyle-plugin будут ошибки. - person Archimedes Trajano; 09.07.2012
comment
Можете ли вы создать небольшой тестовый проект, который покажет это, и создать задачу для Карафа? Исключение Nullpointer, как правило, не должно происходить и должно быть исправлено в инструментах karaf. - person Christian Schneider; 09.07.2012
comment
теперь нашел причину. Или хотя бы исправить это - person Archimedes Trajano; 10.07.2012
comment
‹configuration› ‹!-- Эта конфигурация необходима, иначе плагин Karaf Features выдаст исключение NullPointer, поскольку он попытается просканировать зависимости, которые могут иметь недопустимые манифесты, такие как org.jboss.spec --› ‹kernelVersion›2.2.8‹/ Версия ядра› ‹/configuration› - person Archimedes Trajano; 10.07.2012
comment
Однако теперь он не делает транзитивных зависимостей для обновленных версий Spring. Итак, что в конечном итоге происходит, так это использование плагина Features, нам нужно понизить версии до тех, которые предоставляет Karaf. - person Archimedes Trajano; 10.07.2012
comment
или в моем случае мне просто нужно было добавить их явно в pom.xml - person Archimedes Trajano; 10.07.2012
comment
Подход OBR отлично работает во время выполнения (100% OSGi), но я не могу запустить его с PaxExam. - person Archimedes Trajano; 10.07.2012

Я нашел способ сделать это относительно стандартным способом OSGi, используя Maven. Он использует плагин maven-dependency-plugin для создания репозитория, который содержит только те зависимости, которые требуются в области выполнения.

Затем выполняется цель maven-bundle-plugin:index для создания файла репозитория.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, который будет содержать наборы, которые у вас есть (например, функция/продукт)

person Archimedes Trajano    schedule 12.06.2012

Насколько я знаю, лучшее, что вы можете сделать, это использовать Maven для загрузки всех зависимостей, а затем использовать плагин Felix bnd, чтобы преобразовать ваш локальный (или удаленный) репозиторий в OBR, который вы можете использовать с Karaf.

person Oleksi    schedule 03.06.2012
comment
Любой пример того, как сделать это преобразование? - person Archimedes Trajano; 03.06.2012
comment
@ArchimedesTrajano Ссылка, которую я предоставил, приводит некоторые примеры. В основном дело либо в настройке файла pom с некоторыми дополнительными деталями (опять же, см. ссылку), а затем в запуске mvn clean install или mvn clean deploy - person Oleksi; 03.06.2012
comment
Я видел ссылку ранее, и в примерах показано только, как установить пакет для рассматриваемого pom, но не показано, как включать транзитивные зависимости. - person Archimedes Trajano; 03.06.2012
comment
поэтому я и прошу пример. - person Archimedes Trajano; 03.06.2012