我正在尝试编写一个osgi应用程序,该应用程序应使用org.elasticsearch.client.RestHighLevelClient。 为此,我添加了包servicemix.bundles.elasticsearch-client,因为它导出了 org.elasticsearch.client 和所需的 RestHighLevelClient 。不过,显然, RestHighLevelClient 需要servicemix.bundles.elasticsearch(以及其他功能)才能正常工作,所以我还要添加它-两个版本都相同。这两个捆绑软件均导出 org.elasticsearch.client ,但内容不同。 一切都按预期加载,我可以验证导出的软件包。
编辑: 这个问题让我自己重新感到自己是 org.elasticsearch.client.RestHighLevelClient 的ClassNotFound例外。这很奇怪,因为我可以看到elasticsearch-client可用并导出所需的包。
我的解释是,Karaf确实能够处理共享软件包。它似乎加载了具有所需程序包的捆绑软件之一,以满足我的应用程序功能的要求,然后,即使所需的类实际上存在于另一个捆绑软件中,也决定它足够了。
在@ChristianSchneider发表评论并获得更多了解之后,我更新了我的配置。但是,问题仍然存在。
我现在具有elastisearch-client6-功能和elasticsearch6-功能
<feature name="elasticsearch6" version="6.3.2" description="Elasticsearch Base libraries"> <bundle start-level="80">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.elasticsearch/6.3.2_1</bundle> <bundle dependency="true">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-cbor/2.9.6</bundle> <bundle dependency="true">mvn:com.fasterxml.jackson.core/jackson-core/2.9.6</bundle> <bundle dependency="true">wrap:mvn:com.vividsolutions/jts/1.13</bundle> <bundle dependency="true">wrap:mvn:io.sgr/s2-geometry-library-java/1.0.0</bundle> <bundle dependency="true"><![CDATA[wrap:mvn:io.netty/netty-all/4.1.28.Final$Bundle-Version=4.1.28&Export-Package=*;version=4.1.28]]></bundle> <bundle dependency="true">wrap:mvn:org.locationtech.jts/jts-core/1.15.1</bundle> </feature> <feature name="elasticsearch-client6" version="6.3.2" description="Elasticsearch Client libraries"> <bundle start-level="80">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.elasticsearch-client/6.3.2_1</bundle> </feature>
和我的应用程序功能
<feature name="my-application" version="${version}"> <bundle start-level="92">mvn:com.mycompany/application-feature/${version}</bundle> </feature>
请问有人可以建议我如何强制我的应用程序功能同时加载elasticsearch-client6-feature和elasticesearch6。
亲切的问候 Jiinx
答案 0 :(得分:0)
我遇到了同样的问题,这就是我所做的...
这将创建一个具有弹性搜索及其所有依赖项的捆绑软件,这些捆绑软件将导出到导入弹性搜索包或将该捆绑软件添加为依赖项的其他捆绑软件中。
希望能为您提供正确的方向,最容易在MANIFEST编辑器中实现,因为它会自动更新build.properties文件。