OSGI отсутствует требование об ошибке - PullRequest
7 голосов
/ 02 декабря 2011

Я новичок в OSGI и пытаюсь выяснить, как устранить ошибки, например, приведенную ниже

org.osgi.framework.BundleException: неразрешенное ограничение в комплекте org.foo.serviceBundle [253]: Не удалось разрешить 253.0: отсутствует пакет требования [253.0];(& (package = org.slf4j) (версия> = 1.6.0) (! (версия> = 2.0.0)))

Я использовал архетип maven для генерации пакета и добавил простую запись в slf4jв мой класс Activator.Я также использую плагин maven bundle следующим образом:

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.2.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-Activator>org.shoppingsite.Activator</Bundle-Activator>
                </instructions>
            </configuration>
        </plugin>

Я пробовал другие комбинации, и я получаю одну или другую посылку, которая не разрешима.Я пытаюсь развернуть пакет на сервере приложений GlassFish.Любая помощь будет оценена

Спасибо

Ответы [ 4 ]

8 голосов
/ 02 декабря 2011

Обычно это означает, что вам не хватает пакета, который экспортирует org.slf4j. Вот весь рабочий процесс:

  • Плагин maven-bundle-plugin гарантирует, что манифест вашего собственного проекта импортирует org.slf4j (так как он вам нужен).

  • Зависимости maven в POM вашего проекта обеспечат загрузку артефакта slf4j

Тогда 2 вещи могут пойти не так:

  • либо ваша компиляция не удалась, но артефакт slf4j не был найден (но я полагаю, вы заметили это)

  • или загруженный артефакт slf4 не имеет манифеста или не экспортирует org.slf4j. Чтобы проверить это, просто загляните в манифест пакета org.slf4j. Если вы запускаете вещи прямо в IDE, например, в eclipse, вы можете вместо этого зайти в $ HOME / .m2 /, чтобы найти артефакт.

Если у вашего артефакта нет надлежащего манифеста, вам придется либо найти какой-нибудь другой репозиторий, из которого вы можете получить нужный пакет, либо изменить тот, который вы получаете, и установить его в локальном репозитории (и развернуть в вашем локальном репозитории Maven (например, в нексусе), если он у вас есть)

Последнее, что нужно: рассмотрите возможность использования плагина maven-scr вместо непосредственного определения активаторов и обнаружения служб. Хотелось бы, чтобы я знал это, когда начал работать с OSGi!

4 голосов
/ 11 февраля 2012

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

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.6</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Bundle-Activator>org.shoppingsite.Activator</Bundle-Activator>
            <Embed-Dependency>
                slf4j-api;scope=compile,
                log4j;scope=compile
            </Embed-Dependency>
        </instructions>
    </configuration>
</plugin>
0 голосов
/ 14 апреля 2014

Я не уверен насчет сервера приложений Grassfish. В Fuse ESB добавив org.slf4j. * </ Import-Package>, мы решили ту же проблему.

0 голосов
/ 07 марта 2013

Добавить для к зависимостям в POM. Читать http://fusesource.com/docs/ide/7.1/release_notes/release_notes.html

...