Val*_*huk 8 scala sbt playframework aether
我使用Scala 2.11的Play Framework 2.3.8(用于Java).
我收到这个警告:
SLF4J:类路径包含多个SLF4J绑定.
SLF4J:在[jar:file:/Users/vdanylchuk/.ivy2/cache/org.slf4j/slf4j-simple/jars/slf4j-simple-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class中找到绑定]
SLF4J:在[jar:file:/Users/vdanylchuk/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.0.13.jar!/ org/slf4j/impl /中找到绑定StaticLoggerBinder.class]
SLF4J:有关说明,请参阅http://www.slf4j.org/codes.html#multiple_bindings.
这会在运行时以随机方式导致实际问题.在某些部署的主机上,一切顺利,日志按配置编写.在其他主机上,错误的绑定获胜,并且日志写入错误的位置.部署过程的脚本编写完全相同.所以http://www.slf4j.org/codes.html#multiple_bindings上的警告是正确的,这是随机的,所以我需要删除额外的绑定.
有趣的是,它们都来自Play框架.logback-classic(我实际上想要使用)来自play库,而slf4j-simple来自play sbt插件.
我在这里和邮件列表中阅读了很多类似的问题.示例: 如何在Play 2.3.x启动时修复"SLF4J:类路径包含多个SLF4J绑定"? 常见的解决方案是使用某种形式的排除规则.没有一个建议的解决方案适合我.[更新:事实上,他们确实如此 - 请参阅下面的解决方案.]我不希望slf4j-simple出现在最终的类路径中,但确实如此.即使我将excludeAll(ExclusionRule(organization ="org.slf4j"))添加到我的项目中的每个依赖项,除了play框架.
关于如何摆脱slf4j简单的任何想法?最好在sbt项目级别上,无需手动清理构建结果的类路径.
更新:重现说明
我用一个小的测试项目缩小了它.事实证明它是由play sbt插件和我们使用的aether-deploy插件的组合触发的.这种小配置就足够了.
build.sbt:
name := "slf4j-test"
version := "1.0"
scalaVersion := "2.11.5"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
Run Code Online (Sandbox Code Playgroud)
项目/ plugins.sbt:
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8")
addSbtPlugin("no.arktekk.sbt" % "aether-deploy" % "0.13")
Run Code Online (Sandbox Code Playgroud)
项目/ build.properties:
sbt.version=0.13.7
Run Code Online (Sandbox Code Playgroud)
然后运行"sbt test:compile"或"sbt run"(并查询localhost:9000)以查看警告.它与scala 2.10的工作原理相同.
我的错.最后,在project/plugins.sbt中进行了一个简单的排除修复了这个问题:
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.8" exclude("org.slf4j", "slf4j-simple"))
Run Code Online (Sandbox Code Playgroud)
我之前尝试过这个,但显然出现了语法错误,并认为这不受支持.捂脸
归档时间: |
|
查看次数: |
2038 次 |
最近记录: |