Конфигурация Karaf OSGi выдает ResolutionException: Невозможно разрешить root: отсутствует требование [root] osgi.identity; - PullRequest
0 голосов
/ 20 мая 2019

Я создаю приложение Spring Boot, которое будет работать на Karaf. Я пытаюсь раскрыть свойства конфигурации проекта в Karaf, чтобы иметь возможность изменять свойства с помощью config: property-set без необходимости повторного развертывания приложения.

Итак, мне удалось настроить мою функцию karaf для предоставления свойств Karaf, но я пытаюсь создать компонент OSGi, чтобы иметь возможность получать обновления при изменении свойства с помощью config: property-set.

Ошибка при попытке установить мой файл .kar:

[[A2019-05-19T23:09:32,926 | INFO  | pipe-kar:install file:/Users/nikos/development/interlink/thirdParty/osgi-karaf-spring-boot-demo/osgi-spring-boot-demo-features/target/osgi-spring-boot-demo-features-0.0.1-SNAPSHOT.kar | KarServiceImpl                   | 35 - org.apache.karaf.kar.core - 4.1.3 | Added feature repository 'mvn:com.nemesis/osgi-spring-boot-demo-features/0.0.1-SNAPSHOT/xml/features'
2019-05-19T23:09:32,927 | INFO  | pipe-kar:install file:/Users/nikos/development/interlink/thirdParty/osgi-karaf-spring-boot-demo/osgi-spring-boot-demo-features/target/osgi-spring-boot-demo-features-0.0.1-SNAPSHOT.kar | FeaturesServiceImpl              | 9 - org.apache.karaf.features.core - 4.1.3 | Adding features: osgi-spring-boot-demo-feature/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
2019-05-19T23:09:32,995 | WARN  | pipe-kar:install file:/Users/nikos/development/interlink/thirdParty/osgi-karaf-spring-boot-demo/osgi-spring-boot-demo-features/target/osgi-spring-boot-demo-features-0.0.1-SNAPSHOT.kar | KarServiceImpl                   | 35 - org.apache.karaf.kar.core - 4.1.3 | Unable to install Kar feature osgi-spring-boot-demo-feature/0.0.1.SNAPSHOT
org.osgi.service.resolver.ResolutionException: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=osgi-spring-boot-demo-feature; type=karaf.feature; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]"; filter:="(&(osgi.identity=osgi-spring-boot-demo-feature)(type=karaf.feature)(version>=0.0.1.SNAPSHOT)(version<=0.0.1.SNAPSHOT))" [caused by: Unable to resolve osgi-spring-boot-demo-feature/0.0.1.SNAPSHOT: missing requirement [osgi-spring-boot-demo-feature/0.0.1.SNAPSHOT] osgi.identity; osgi.identity=com.nemesis.osgi-spring-boot-demo-bundle; type=osgi.bundle; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]"; resolution:=mandatory [caused by: Unable to resolve com.nemesis.osgi-spring-boot-demo-bundle/0.0.1.SNAPSHOT: missing requirement [com.nemesis.osgi-spring-boot-demo-bundle/0.0.1.SNAPSHOT] osgi.extender; filter:="(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))"]]
    at org.apache.felix.resolver.ResolutionError.toException(ResolutionError.java:42) ~[?:?]
    at org.apache.felix.resolver.ResolverImpl.doResolve(ResolverImpl.java:391) ~[?:?]
    at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:377) ~[?:?]
    at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:349) ~[?:?]
    at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:218) ~[?:?]
    at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:291) ~[?:?]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1248) ~[?:?]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$1(FeaturesServiceImpl.java:1147) ~[?:?]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
    at java.lang.Thread.run(Thread.java:748) [?:?]

Вот мое репозиторий github . Я использую Java 8 с Maven 3.6, org.osgi.core 5.0.0, Караф 4.1.3

Есть идеи, как мне решить проблему? Является ли правильный способ получения обновлений модификации свойств от Karaf с использованием @Component и @Modified?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Вы получаете указанную ошибку из-за того, что либо зависимый пакет не установлен, либо версия установленного пакета не находится в диапазоне,

Вы можете проверить, установлен ли пакет или какая версия установлена, с помощью команды ниже в терминале karaf:

  la -l|grep "#bundle name"

где имя пакета - это пакет, для которого вы получаете сообщение об ошибке,

Иногда может быть так, что отсутствует только один пакет, но есть вероятность, что функция не установлена, функция представляет собой не что иное, как группу пакетов,

Чтобы проверить, установлена ​​функция или нет, используйте следующую команду:

feature:list|grep "#feature name" 

Здесь вы можете установить функцию, и она должна решить проблему

feature:install scr
1 голос
/ 20 мая 2019

Сообщение об ошибке означает, что вы пропустили пакет, который соответствует одному из требований вашего пакета.

В конце этого длинного сообщения об ошибке вы найдете пропущенное требование:

(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))

Это означает, что вам не хватает экстендера для модели osgi.component.

Так что там происходит?Вы используете аннотации декларативных услуг в ваших классах.Плагин maven bundle считывает их и создает xml для декларативных сервисов, а также требование к вышеуказанному расширителю.

Таким образом, это требование помогает вам не пропустить время выполнения декларативных сервисов при установке вашего пакета.

В случае karaf решение заключается в установке функции, обеспечивающей время выполнения:

feature:install scr
...