【问题标题】:Maven SLF4J: Class path contains multiple SLF4J bindingsMaven SLF4J:类路径包含多个 SLF4J 绑定
【发布时间】:2014-05-18 17:47:27
【问题描述】:

我在运行我的 java 代码时遇到了运行时异常。有人可以帮我解决绑定冲突。

    SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Air/Desktop/sms/slf4j-1.7.7/slf4j-android-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Air/Desktop/sms/slf4j-1.7.7/slf4j-jcl-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Air/Desktop/sms/slf4j-1.7.7/slf4j-jdk14-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Air/Desktop/sms/slf4j-1.7.7/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Air/Desktop/sms/slf4j-1.7.7/slf4j-nop-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Air/Desktop/sms/slf4j-1.7.7/slf4j-simple-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.AndroidLoggerFactory]
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Fatal error in constructor!
    ... 2 more

【问题讨论】:

  • 您是否按照 slf4j 的安装说明进行操作?

标签: java maven


【解决方案1】:

运行mvn dependency:tree 并搜索哪个依赖项具有您不想要的slf4j 实现,然后排除 使用依赖项排除,例如:

<dependency>
    <groupId>org.someexternallib</groupId>
    <artifactId>someexternallibartifact</artifactId>
    <version>...</version>

    <exclusions>
       <exclusion> 
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
       </exclusion>
       <exclusion> 
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
      </exclusion>
    </exclusions> 
</dependency>

【讨论】:

  • 这个问题到处都是堆栈溢出,但这终于是我需要的东西!
  • 当绑定来自外部类路径时,如何在运行时排除绑定?
  • 您希望它在编译时加入,但在运行时排除?
  • 任何使用 IntelliJ 的人,都可以使用“Maven”窗口视图查看包含 log4j 和 slf4j 的依赖项是什么。发现它很有用。
  • @P5Coder 在 IntelliJ 中:查看 -> 工具窗口 -> Maven 项目。
【解决方案2】:

看来你有几个 SLF4J 的实现;你应该排除所有不必要的

【讨论】:

    【解决方案3】:

    此错误意味着您的类路径中有多个 SLF4J 实现。 查找错误具体说明了什么。 IE : SLf4J: Found binding in..... (这将打印找到 StaticLoggerBinder.class 实例的所有 jar 文件)。从您的类路径中删除所有此类 jar,除了您需要其 StaticLoggerBinder.class 实现的 jar。

    【讨论】:

    • 你是救世主 :)
    【解决方案4】:

    您可以去 POM.xml ,打开 Dependency Hierarchy 并找到 slf4j 条目。通过右键单击“排除 maven 工件”排除其余条目。

    【讨论】:

    • 我可以在哪个 IDE 中做到这一点?
    【解决方案5】:

    这行得通!更新porm.xml

    <dependency>
    <groupId>org.someexternallib</groupId>
    <artifactId>someexternallibartifact</artifactId>
    <version>...</version>
    
    <exclusions>
       <exclusion> 
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
       </exclusion>
       <exclusion> 
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
      </exclusion>
    </exclusions> 
    

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 2012-12-11
      • 2016-03-12
      • 2015-08-10
      • 2021-05-19
      • 1970-01-01
      • 2018-12-12
      • 2012-09-11
      相关资源
      最近更新 更多