sbt排除slf4j无法正常工作

kon*_*tor 7 scala slf4j sbt playframework

我的游戏项目中有第三方依赖.该第三方库对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]
Run Code Online (Sandbox Code Playgroud)

我尝试了一些事情,但可以摆脱错误.

"com.orgname.platform" % "platform-metric-client" % "1.0.4" excludeAll(
    ExclusionRule(organization = "org.slf4j"))
Run Code Online (Sandbox Code Playgroud)

我也试过以下排除

"com.orgname.platform" % "platform-metric-client" % "1.0.4" exclude("org.slf4j","slf4j-jdk14)
Run Code Online (Sandbox Code Playgroud)

还有这一个

 "com.orgname.platform" % "platform-metric-client" % "1.0.4" exclude("org.slf4j","slf4j-log4j12)
Run Code Online (Sandbox Code Playgroud)

由于我无法从第三方依赖项中删除slf4j,所以厌倦了删除对slf4j的播放依赖,通过修改projcts/plugin.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.6" exclude("org.slf4j", "slf4j-simple"))
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能摆脱这个警告.这个警告如何影响日志记录?Scala实现将使用哪种日志记录实现?

goo*_*zez 5

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"
)
Run Code Online (Sandbox Code Playgroud)

编辑:

我建议花一些时间并了解传递依赖和范围管理。它将为您节省时间。Maven上有一个很棒而直接的文档页面:https : //maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

PS。排除?提供?


You*_*Bet 3

恕我直言,无论exceptexceptAll,它仅从该库中排除 slf4j 依赖项,而不从整个项目中排除 slf4j 依赖项。因此,所有可能间接依赖于 slf4j 的库依赖行都需要添加exclude("org.slf4j","slf4j-log4j12).

一个快速但肮脏的解决方案是附加exclude("org.slf4j","slf4j-log4j12)到每个libraryDepcies 行。我尝试过这个,它对我有用。