【问题标题】:Unable to Start OSGi Service Unresolved Requirements无法启动 OSGi 服务 未解决的要求
【发布时间】:2018-07-21 07:43:36
【问题描述】:

我在 OSGi 中创建了一个使用 Spark 提供休息端点的服务。

我收到以下错误:

错误

Error executing command: Error executing command on bundles: Error starting bundle 66: Unable to resolve OSGiConsumerProducer.ProducerConsumer.helloendpoint [66](R 66.0): missing requirement [OSGiConsumerProducer.ProducerConsumer.helloendpoint [66](R 66.0)] osgi.wiring.package; (osgi.wiring.package=spark.Spark.get) Unresolved requirements: [[OSGiConsumerProducer.ProducerConsumer.helloendpoint [66](R 66.0)] osgi.wiring.package; (osgi.wiring.package=spark.Spark.get)]

我已经被 POM 定义为这样编译:

<instructions>
    <Bundle-SymbolicName>${parent.groupId}.${parent.artifactId}.helloendpoint</Bundle-SymbolicName>
    <Bundle-Activator>com.osgi.endpoint.EndpointActivator</Bundle-Activator>
    <Import-Package>
        spark.Spark.get
    </Import-Package>
    <Export-Package>
        com.osgi.endpoint.HelloEndpointAPI
    </Export-Package>
    <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
</instructions>

我假设我只需要导出我的 impl 类使用的接口,然后导入 Spark 包,因为我在这个模块中使用它?

潜在问题:

我需要将 Spark 安装到 Karaf 中吗?

【问题讨论】:

    标签: maven osgi osgi-bundle


    【解决方案1】:

    您确定spark.Spark.get 是Java 包的名称吗?听起来更像是一个方法名。

    我的建议是完全删除这些说明中的Import-Package 部分。该工具不仅能够确定您的捆绑包需要导入哪些包。

    【讨论】:

    • 你是对的。我最终不得不导入 core-spark(工件名称)以及嵌入所有依赖项以配合它。
    • 嵌入所有依赖项?伤心。
    • 所以我理解他们的方式是嵌入是不好的,因为它会增加输出 jar 的大小,但不嵌入是不好的,因为客户对依赖项负责。如果我不嵌入,那么运行系统的计算必须做什么?
    • 过度使用嵌入是不好的,因为如果每个人都只是嵌入依赖项,那么应用程序中的每个包都会变成一个巨大的单体,并且您有许多公共库的冗余副本。 OSGi 是一种为互操作性而设计的技术;不是为了创建从不相互交谈的孤立的巨石。 (我添加了限定词“过度使用时”,因为嵌入确实有有效的用例,只是不是很多)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2017-09-28
    相关资源
    最近更新 更多