Конфигурация Karaf OSGi выдает ResolutionException: Невозможно разрешить root: отсутствует требование [root] osgi.identity;
Я создаю приложение 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 ответа
Сообщение об ошибке означает, что вы пропустили комплект, который соответствует одному из требований вашего комплекта.
Вы найдете недостающее требование в конце этого длинного сообщения об ошибке:
(&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))
Это означает, что вам не хватает экстендера для модели osgi.component.
Так что там происходит? Вы используете аннотации декларативных услуг в ваших классах. Плагин maven bundle читает их и создает xml для декларативных сервисов, а также требование для расширителя, описанного выше.
Таким образом, это требование помогает вам не пропустить время выполнения декларативных сервисов при установке вашего пакета.
В случае karaf решение состоит в том, чтобы установить функцию, которая обеспечивает время выполнения:
feature:install scr
Вы получаете указанную ошибку, потому что либо зависимый пакет не установлен, либо версия установленного пакета не входит в диапазон,
Вы можете проверить, установлен ли пакет или нет и какая версия установлена, с помощью следующей команды в терминале karaf:
la -l|grep "#bundle name"
где имя пакета - это пакет, для которого вы получаете ошибку,
Иногда может быть возможно, что отсутствует только один комплект, но есть вероятность, что функция не установлена, функция представляет собой не что иное, как группу комплектов,
Чтобы проверить, установлена ли функция или нет, используйте команду ниже:
feature:list|grep "#feature name"
Здесь вы можете установить эту функцию, и это должно решить проблему.
feature:install scr