0

在什么情况下,可能会出现以下错误?当启动具有多个捆绑包的应用程序时,偶尔会发生这种情况。这个错误的修复方法是什么?

Caused by: org.osgi.framework.BundleException: Unable to resolve module com.springsource.slf4j.api [135.0] because it exports package 'org.slf4j.spi' and is also exposed to it from com.springsource.slf4j.api [135.0] via the following dependency chain:

  com.springsource.slf4j.api [135.0]
    import: (&(package=org.slf4j.impl)(version>=1.6.1)(!(version>=2.0.0)))
     |
    export: package=org.slf4j.impl; uses:=org.slf4j
  com.springsource.slf4j.api [135.0]
    import: (&(package=org.slf4j)(version>=1.6.1)(version<=1.6.1))
     |
    export: package=org.slf4j; uses:=org.slf4j.spi
  com.springsource.slf4j.api [135.0]
    import: (&(package=org.slf4j.spi)(version>=1.6.1)(version<=1.6.1))
     |
    export: package=org.slf4j.spi
  com.springsource.slf4j.api [135.0]
    at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3574)
    at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1619)
4

1 回答 1

1

SLF4J 一段时间以来对 OSGi 很友好,因此不需要使用基于 springsource 的 jar-s。

安装最新的 slf4j-api jar 和你想要使用的实现!

这个怎么运作:

slf4j-api 使用不在 jar 中且未导入的类。slf4j-xxximpl(如 slf4j-simple)是宿主为 slf4j-api 的片段包,因此它们将具有通用的类加载器。

这意味着您必须一起安装 slf4j-api 和 slf4j-xxx (如果您安装它,运行时调用容器上的刷新,如果需要有良好的接线)。这也意味着 slf4j 不能与更多的实现一起工作,而且在同一个容器中拥有多个版本的 slf4j-api 也不是一个好主意。

解决方案:删除基于 springsource 的 jar 并将最新的 slf4j-api 和 impl jar 安装到容器中,然后在必要时调用 refresh。

于 2013-08-27T10:07:18.773 回答