如何在 Play 2.3.x 启动时修复“SLF4J:类路径包含多个 SLF4J 绑定”?
Posted
技术标签:
【中文标题】如何在 Play 2.3.x 启动时修复“SLF4J:类路径包含多个 SLF4J 绑定”?【英文标题】:How to fix "SLF4J: Class path contains multiple SLF4J bindings" at startup of Play 2.3.x? 【发布时间】:2014-10-02 06:06:57 【问题描述】:我升级了我的 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.jar
或slf4j-jdk14-1.7.7.jar
或slf4j-simple-1.7.7.jar
。
这些在类路径上的情况如何?
【问题讨论】:
这是一个已知问题(已在问题跟踪器上归档)。 @applicius 能给我们发个链接吗? github.com/playframework/playframework/issues/3206 【参考方案1】:按照 cmets 和可能的解决方案,我可以为没有修复的版本的用户建议我的包含在 build.sbt
中,例如玩2.3.2:
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)
【讨论】:
以上是关于如何在 Play 2.3.x 启动时修复“SLF4J:类路径包含多个 SLF4J 绑定”?的主要内容,如果未能解决你的问题,请参考以下文章
当 Google Play 服务无法获得位置修复时,我如何获得通知?
如何修复 Google Api 错误:禁止:将应用程序上传到 Play 商店时,Android App Bundle 使用错误的密钥签名
Play/Scala 2.5 SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”
Play framework 2.3.x Server Error 无法注册类