如何在使用SLF4J绑定时解决类路径包含多个SLF4J绑定的错误?selenium-server-4.0.0-alpha-5.jar
和 gerrit-acceptance-framework-3.1.4.jar
错误堆栈跟踪。
[RemoteTestNG] detected TestNG version 7.2.0
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/DELL/Desktop/selenium/selenium-server-4.0.0-alpha-5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/DELL/.m2/repository/com/google/gerrit/gerrit-acceptance-framework/3.1.4/gerrit-acceptance-framework-3.1.4.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.JDK14LoggerFactory]
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 24218
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 48737
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 5045
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
===============================================
Suite
Total tests run: 3, Passes: 0, Failures: 3, Skips: 0
===============================================
这个错误信息...
Class path contains multiple SLF4J bindings.
...意味着在类路径上存在多个SLF4J绑定。
根据 文件:
SLF4J API的设计是为了一次只与一个底层日志框架绑定。如果类路径上存在一个以上的绑定,SLF4J将发出警告,列出这些绑定的位置。
从错误的stacktrace可以很明显的看出 StaticLoggerBinder.class
似乎在以下两个类的路径中都可以使用。
C:/Users/DELL/Desktop/selenium/selenium-server-4.0.0-alpha-5.jar!/org/slf4j/impl
C:/Users/DELL/.m2/repository/com/google/gerrit/gerrit-acceptance-framework/3.1.4/gerrit-acceptance-framework-3.1.4.jar!/org/slf4j/impl
当类路径上有多个绑定时,请选择一个且仅选择一个您希望使用的绑定,并删除其他绑定。SLF4J在这个警告中提供的位置列表通常提供了足够的信息来识别将不需要的SLF4J绑定拉入你的项目中的依赖性。因此,在你的项目的 pom.xml
文件中,你必须在声明无良的依赖关系时排除其中一个SLF4J绑定。举个例子,要排除 StaticLoggerBinder.class
从 selenium-server-4.0.0-alpha-5.jar
:
</dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.X</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
作为一种替代办法,你也可以排除 StaticLoggerBinder.class
从 gerrit-acceptance-framework-3.1.4.jar
注: SLF4J发出的警告只是一个警告。即使存在多个绑定,SLF4J也会选择一个日志记录框架实现并与之绑定。SLF4J选择绑定的方式是由JVM决定的,而且出于所有实际目的,应该被认为是随机的。从1.6.6版本开始,SLF4J将命名它实际绑定的frameworkimplementation类。