簡體   English   中英

Karaf OSGi配置拋出ResolutionException:無法解析root:缺少要求[root] osgi.identity;

[英]Karaf OSGi config throws ResolutionException: Unable to resolve root: missing requirement [root] osgi.identity;

我正在創建一個將在Karaf上運行的Spring Boot應用程序。 我試圖在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,Karaf 4.1.3一起使用

有什么想法可以解決該問題嗎? 是使用@Component和@Modified從Karaf獲取屬性修改更新的正確方法嗎?

提前致謝!

該錯誤消息表示您缺少提供捆綁軟件要求之一的捆綁軟件。

您會在此長錯誤消息的末尾找到缺少的要求:

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

這意味着您缺少osgi.component模型的擴展程序。

那到底是怎么回事? 您可以在類中使用聲明式服務注釋。 Maven軟件包插件讀取它們並為聲明性服務以及上述擴展程序的要求創建xml。

因此,此要求可以幫助您在安裝軟件包時不要錯過聲明式服務運行時。

如果是karaf,解決方案是安裝提供運行時的功能:

feature:install scr

由於未安裝從屬捆綁包或已安裝捆綁包的版本不在范圍內,因此出現了上述錯誤,

您可以在karaf終端中通過以下命令檢查捆綁軟件是否已安裝以及安裝的版本:

  la -l|grep "#bundle name"

其中包名稱是您要獲取錯誤的包,

有時可能只缺少一個捆綁軟件,但是有可能未安裝該功能,該功能僅是一組捆綁軟件,

要檢查功能是否已安裝,請使用以下命令:

feature:list|grep "#feature name" 

在這里,您可以安裝該功能,它應該可以解決問題

feature:install scr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM