java Howto:osgi和共享包?
我正在尝试编写一个osgi应用程序,它应该利用这个组织。弹性搜索。客户RestHighLevelClient。 为此,我添加了bundle servicemix。捆。elasticsearch客户端,因为它导出组织。弹性搜索。客户端与所需的RestHighLevelClient。显然,RestHighLevelClient需要servicemix。捆。elasticsearch(除其他外)开始工作,因此我也添加了它-两者都是相同的版本。这两个包都导出org。弹性搜索。客户端但内容不同。 一切按预期加载,我可以验证导出的包
编辑: 我遇到的问题将其本身修改为org的ClassNotFound异常。弹性搜索。客户RestHighLevelClient。这很奇怪,因为我可以看到elasticsearch客户端可用并导出所需的包
我的解释是KarafDoesen似乎能够处理共享包。它似乎加载了一个bundle,该bundle具有满足我的应用程序特性中的需求所需的包,并且在这之后,它决定它是足够的,即使所需的类实际上存在于另一个bundle中
在@ChristianSchneider发表评论并获得更多理解后,我更新了配置。然而,这个问题仍然存在
我现在有一个ElasticSearch-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,因为它们都是必需的
问候 吉因克斯
# 1 楼答案
我也有同样的问题,这就是我所做的
这将创建一个具有弹性搜索及其所有依赖项的捆绑包,这些捆绑包将导出到导入弹性搜索包或将捆绑包作为依赖项添加的其他捆绑包
希望这能让您走上正确的方向,在eclipse中使用清单编辑器最容易做到这一点,因为它会自动更新构建。属性文件