10

我有一个简单的 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.

两个 URL 都解析为包中完全相同的 jar

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

3 回答 3

5

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

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

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

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

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

于 2014-01-16T21:54:50.713 回答
3

对我来说,问题是由于安装了插件而发生的。要找出它是哪一个.. 在调试 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 可以解决问题:

在此处输入图像描述

如果您手动更改插件选择,请小心并使用验证插件功能确保您不会产生其他问题。

于 2017-06-24T12:45:52.573 回答
0

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

如果没有,那条路径上是否有两个不同版本的 SLF4J?

于 2013-09-12T07:11:45.467 回答