Eclipse RCP插件中的多个slf4j绑定

时间:2013-09-10 14:06:58

标签: java osgi eclipse-rcp slf4j

我有一个简单的Eclipse插件,它在激活时出现以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [bundleresource://103.fwk8918249:1/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [bundleresource://103.fwk8918249:4/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

这两个网址都解析为捆绑包中完全相同的jar

libs/slf4j-log4j12.jar!/org/slf4j/impl/StaticLoggerBinder.class
  • 我该如何解决这个问题?
  • 为什么捆绑包加载罐子两次(“:1”和“:4”)?

3 个答案:

答案 0 :(得分:5)

这是在项目的类路径(JDT .classpath文件)和MANIFEST.MF文件中定义SLF4J绑定的结果。

您应该从项目的类路径中删除SLF4J绑定:

  

YourProject→属性→Java构建路径→库

     
      
  • 选择SLF4J绑定JAR并点击“删除”。
  •   

一旦你这样做,你的类加载器中只应该有一个对SLF4J绑定的引用(因此不应出现错误信息)。

答案 1 :(得分:2)

对我来说,由于安装了插件,问题就出现了。要找出它是哪一个..在调试eclipse实例的元数据中查找文件SavedExternalPluginList.txt,例如

runtime-EclipseApplication\.metadata\.plugins\org.eclipse.pde.core\SavedExternalPluginList.txt

并搜索slf4j。通过这种方式,您可以了解哪些插件可能负责。我找到了以下条目:

file:/D:/EclipseJava/App/Eclipse/plugins/ch.qos.logback.slf4j_1.0.7.v201505121915.jar

file:/D:/EclipseJava/App/Eclipse/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.7.0.20160603-1931/

file:/D:/EclipseJava/App/Eclipse/plugins/org.slf4j.api_1.7.2.v20121108-1250.jar
file:/D:/EclipseJava/App/Eclipse/plugins/org.slf4j.impl.log4j12_1.7.2.v20131105-2200.jar

为我的目标平台禁用插件ch.qos.logback.slf4j可以解决问题:

enter image description here

如果您手动更改插件选择,请注意并使用验证插件功能,以确保您不会创建其他问题。

答案 2 :(得分:0)

这似乎解决了这个问题: SLF4J: Class path contains multiple SLF4J bindings

如果没有,那么你在这条路上有两个不同版本的SLF4J吗?