【问题标题】:starting slf4j bundle doesn't start on felix启动 slf4j 包不会在 felix 上启动
【发布时间】:2015-07-25 14:22:34
【问题描述】:

我有 felix-framework-5.0.1,我正在尝试将 slf4j-api-1.6.0.jar 捆绑到 felix isgi 容器中。

  1. 在 felix 控制台中,我正在输入 install file:bundle/slf4j-api-1.6.0.jar

  2. 我收到了一条消息Bundle ID: 42

  3. 然后我正在尝试启动捆绑包start 42

  4. 我收到了消息

org.osgi.framework.BundleException: Unable to resolve slf4j.api [42](R 42.0): missing requirement [slf4j.api [42](R 42.0)] osgi.wiring.package; (&(osgi.wiring.p ackage=org.slf4j.impl)(version>=1.5.5)) Unresolved requirements: [[slf4j.api [42](R 42.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j.impl)(version>= 1.5.5))] g!

任何人都可以帮助我吗?如何将slf4j 捆绑到 felix 中?

【问题讨论】:

    标签: java osgi bundle slf4j


    【解决方案1】:

    slf4j-api 需要 org.slf4j.impl 包。这个包包含在每个 slf4j 实现中,如 slf4j-simple、slf4j-logback 等。

    实现包需要来自 API 工件的 org.slf4j 包。有一个交叉引用。这只能是由于实现是 API 的fragment bundles 的原因。当实现与 API 一起安装时,它们将有一个通用的类加载器,它们将一起解析。他们的两个要求都会得到满足。

    简而言之:您必须选择其中一种实现并安装它。例如:slf4j-simple.

    您应该使用相同版本的 API 和实现来满足他们的“交叉需求”。

    【讨论】:

      【解决方案2】:

      您的库包含以下 3 个包 (link):

      1. org.slf4j
      2. org.slf4j.helpers
      3. org.slf4j.spi

      但您必须有一个包含org.slf4j.impl 包的附加库。

      此外,从清单文件中,您可以看到导出了哪些包 (Export-Package)(它们对其他包可见)以及导入了哪些包 (Import-Package)(它们必须可用于给定包)。有时给定的包必须来自具有正确版本的包。


      如果您找不到正确的捆绑包,也许这个page 会帮助您。

      【讨论】:

      猜你喜欢
      • 2015-12-17
      • 2023-03-22
      • 2016-03-25
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      相关资源
      最近更新 更多