如何在Play 2.3.x启动时修复“SLF4J:类路径包含多个SLF4J绑定”?

9
我升级了Play和其他库的版本,现在看到了这个:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/paul/.ivy2/cache/org.slf4j/slf4j-nop/jars/slf4j-nop-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/paul/.ivy2/cache/org.slf4j/slf4j-jdk14/jars/slf4j-jdk14-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/paul/.ivy2/cache/org.slf4j/slf4j-simple/jars/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.helpers.NOPLoggerFactory]

我正在尝试追踪它们的来源,但当我运行show managed-classpath时,唯一的slf4j jar文件是

/home/paul/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.6.jar
/home/paul/.ivy2/cache/org.slf4j/jul-to-slf4j/jars/jul-to-slf4j-1.7.6.ja
/home/paul/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.7.6.jar

我从未见过 slf4j-nop-1.7.7.jarslf4j-jdk14-1.7.7.jarslf4j-simple-1.7.7.jar

这些在类路径上是如何出现的?


1
这是一个已知的问题(已在问题跟踪器上提交)。 - cchantep
1
@applicius,你能给我们发送一个链接吗? - IsKernel
1
https://github.com/playframework/playframework/issues/3206 - cchantep
1个回答

16

根据评论和可能的解决方案,我可以为那些没有修复版本的用户(例如Play 2.3.2)提出我的建议,将其包含在build.sbt中:

libraryDependencies ++= Seq(
  "org.slf4j" % "slf4j-api"       % "1.7.7",
  "org.slf4j" % "jcl-over-slf4j"  % "1.7.7"
).map(_.force())

libraryDependencies ~= { _.map(_.exclude("org.slf4j", "slf4j-jdk14")) }

之前:

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/jacek/.ivy2/cache/org.slf4j/slf4j-nop/jars/slf4j-nop-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/jacek/.ivy2/cache/org.slf4j/slf4j-jdk14/jars/slf4j-jdk14-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/jacek/.ivy2/cache/org.slf4j/slf4j-simple/jars/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.helpers.NOPLoggerFactory]
[info] play - Application started (Dev)

修改后:

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

[info] play - Application started (Dev)

以下是该项目的依赖项:

$ show libraryDependencies [info] List(org.scala-lang:scala-library:2.11.2, com.typesafe.play:twirl-api:1.0.2, com.typesafe.play:play:2.3.2, com.typesafe.play:play-test:2.3.2:test, com.typesafe.play:play-docs:2.3.2:docs, com.typesafe.play:play-jdbc:2.3.2, com.typesafe.play:anorm:2.3.2, com.typesafe.play:play-cache:2.3.2, com.typesafe.play:play-ws:2.3.2, com.typesafe.play:filters-helpers:2.3.2, org.webjars:webjars-play:2.3.0, org.webjars:requirejs:2.1.14-1, org.webjars:underscorejs:1.6.0-3, org.webjars:jquery:2.1.1, org.webjars:bootstrap:3.2.0, org.webjars:angularjs:1.3.0-beta.17, org.postgresql:postgresql:9.3-1102-jdbc41, org.slf4j:slf4j-api:1.7.7, org.slf4j:jcl-over-slf4j:1.7.7)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接