Scala sbt排除slf4j不工作

Scala sbt排除slf4j不工作,scala,playframework,sbt,slf4j,Scala,Playframework,Sbt,Slf4j,我的play项目中存在第三方依赖关系。该第三方库最终依赖于(而非直接)slf4j实现 我收到slf4j的重复绑定错误 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:~/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerB

我的play项目中存在第三方依赖关系。该第三方库最终依赖于(而非直接)slf4j实现

我收到slf4j的重复绑定错误

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:~/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/~/.ivy2/cache/com.orgname.platform/platform-logging-client/jars/platform-logging-client-2.5.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
我试着做了以下事情,但可以消除错误

"com.orgname.platform" % "platform-metric-client" % "1.0.4" excludeAll(
    ExclusionRule(organization = "org.slf4j"))
我也试着遵循排除法

"com.orgname.platform" % "platform-metric-client" % "1.0.4" exclude("org.slf4j","slf4j-jdk14)
还有这个

 "com.orgname.platform" % "platform-metric-client" % "1.0.4" exclude("org.slf4j","slf4j-log4j12)
由于我无法从第三方依赖项中删除slf4j,我已经厌倦了通过修改projcts/plugin.sbt来删除slf4j的播放依赖项

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.6" exclude("org.slf4j", "slf4j-simple"))
我该如何摆脱这个警告呢。此警告如何影响日志记录?Scala实现将使用哪个日志记录实现

IMHO,无论是exclude还是excludeAll,它只从该库中排除slf4j依赖项,而不是从整个项目中排除slf4j依赖项。因此,所有可能过渡依赖于slf4j的库依赖项行都需要添加
排除(“org.slf4j”、“slf4j-log4j12)


一个快速而肮脏的解决方案是将
排除(“org.slf4j”、“slf4j-log4j12)
附加到每个LibraryDependencies行。我尝试了这个,它对我很有效。

YourBestBet的答案是正确的,但是您可以通过将导入序列映射到排除项来保存一些复制粘贴

//dependencies with exclusions
libraryDependencies ++= Seq(
    //depencies
).map(_.exclude("org.slf4j", "*"))

//insert one without exclusion
libraryDependencies ++= Seq(
  "ch.qos.logback" % "logback-classic" % "1.1.3"
)
编辑:

我建议投入一些时间,了解可传递的依赖关系和范围管理。这将在将来为你节省时间。Maven有一个关于它的非常简单的文档页面:


附言:排除?提供?

告诉SBT提供了SLF4J,SBT不会将其添加到
类路径中。为此,请将以下内容添加到
libraryDependencies

"org.slf4j" % "slf4j-simple" % "1," Provided

各种依赖项(或其可传递依赖项)可能引用具有不同版本的SLF4J。这就是为什么我使用了一种新的方法。您可能会发现您需要的实际版本匹配器是我所写内容的一些变体。

如果您的目标是从项目中排除依赖性,那么@YourBestBet和@goozez提供的两个答案都是正确的

在我的项目中,我有多个依赖项,包括
slf4j
,它们相互冲突

一个简单的修复方法(但取决于依赖项的数量)是手动将其从冲突依赖项中排除,而不是根据需要将其完全从项目中删除

  "org.elasticsearch" % "elasticsearch" % esVersion exclude("org.slf4j", "*"),