有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我也有同样的问题,这就是我所做的

    1. 转到https://jar-download.com/artifacts/org.elasticsearch.client/elasticsearch-rest-high-level-client/all-versions这是一个允许您下载maven工件及其所有依赖项的站点,选择您想要的版本
    2. 选择版本后,单击红色下载按钮,它将下载一个包含所有弹性搜索jar和所需依赖项的zip文件。下载后,在本地文件系统上解压缩jar
    3. 创建一个类似com的包。我的公司。第三方。弹性搜索
    4. 在包的根目录中创建一个lib文件夹,并将从下载中解压缩的所有jar复制/粘贴到该文件夹中
    5. 使用eclipse清单编辑器转到运行时选项卡,在类路径部分将所有JAR添加到lib文件夹中。然后,对于导出的包,单击添加并添加所有可用的包

    这将创建一个具有弹性搜索及其所有依赖项的捆绑包,这些捆绑包将导出到导入弹性搜索包或将捆绑包作为依赖项添加的其他捆绑包

    希望这能让您走上正确的方向,在eclipse中使用清单编辑器最容易做到这一点,因为它会自动更新构建。属性文件