启动slf4j bundle并不是从felix开始的

时间:2015-07-25 14:22:34

标签: java osgi bundle slf4j

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

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

  2. 我收到了一封邮件Bundle ID: 42

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

  4. 我收到了消息

  5. 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?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

您的图书馆包含以下3个套餐(link):

  1. org.slf4j
  2. org.slf4j.helpers
  3. org.slf4j.spi
  4. 但您必须拥有一个包含org.slf4j.impl包的附加库。

    此外,从清单文件中,您可以看到导出的包(Export-Package)(其他包可以看到它们)以及导入的包(Import-Package)(必须可以访问它们)给予捆绑)。有时,给定的包必须来自具有正确版本的包。

    如果找不到正确的捆绑,可能page会帮助您。