SLF4J:类path包含多个SLF4J绑定

我收到以下错误。 看来有多个日志框架绑定到sl4j。 不知道如何解决这个问题。 任何帮助是极大的赞赏。

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

通过在引起冲突的依赖(pom.xml)中添加以下排除来解决。

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

Gradle版本;

 configurations.all { exclude module: 'slf4j-log4j12' } 

Sbt版本:

exclude("org.slf4j", "slf4j-log4j12")附加到可传递包含slf4j-log4j12的依赖slf4j-log4j12 。 例如,在Log4j 2.6中使用Spark时:

 libraryDependencies ++= Seq( // One SLF4J implementation (log4j-slf4j-impl) is here: "org.apache.logging.log4j" % "log4j-api" % "2.6.1", "org.apache.logging.log4j" % "log4j-core" % "2.6.1", "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1", // The other implementation (slf4j-log4j12) would be transitively // included by Spark. Prevent that with exclude(). "org.apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12") ) 

我只是忽略/删除该jar文件。

在这里输入图像说明

只需要使用所需的依赖项,而不是全部:)))。 对于我来说,对于日志logging过程的正常工作,你需要这个依赖从pom.xml中排除其他人

 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.8</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.8</version> </dependency> 

这个问题花了我整整一天的时间。 最后我决定用不那么好的把戏。 只要把下面的maven依赖关系放在你的pom.xml文件的开头。 使用file.slf4j-nop.jar,slf4j-simple.jar,slf4j-log4j12.jar,slf4j-jdk14.jar或logback-classic.jar中的任何一个,都应该做这个工作。 请注意,使用来自maven的最新jar子。 这是一个链接 ! 这是一个很好的阅读。 要理解你必须删除在本地资源库中创build的slf4jjar(在我的文件夹名为“.m2”),并运行你的项目为Maven的清洁和Maven的安装,并观察所有正在下载的Maven的jar子。 你会弄清楚JVM如何为我们的程序select最新的(jar)。 为了进一步理解,请从pom.xml文件中删除POM依赖项,并再次进入本地存储库并删除所有SLF4J jar包,然后重新运行Maven clean和maven install项目,并让您观察下载通过maven发生,然后运行你的应用程序来查看影响。 您可能会注意到,错误或exception不会在开始时抛出或提到依赖关系,这是因为JVM正在看我们项目中的第一个jar。但这不是好的举措。 我会说在api或jar中使用禁止,你会发现特定的API下载slf4j jar。 我注意到的是,当我们构buildmaven项目时,几个jar(例如:hibernate注释等)正在下载slf4j。 这就是多个slf4jjar子注入我们的项目的原因,我希望这会有所帮助。 这只是我的经验。

似乎删除.m2目录和:

mvn install -DskipTests -T 4为我解决了这个问题。