我的游戏项目中有第三方依赖。该第三方库对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实现将使用哪种日志记录实现?
答案 0 :(得分:4)
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有一个非常简单的文档页面: https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
PS。排除?提供?
答案 1 :(得分:3)
恕我直言,无论排除还是 excludeAll ,它只会从THAT库中排除slf4j依赖关系,而不是从整个项目中排除slf4j依赖关系。因此,可能传递依赖于slf4j的所有库依赖关系行都需要添加exclude("org.slf4j","slf4j-log4j12)
。
快速而肮脏的解决方案是将exclude("org.slf4j","slf4j-log4j12)
附加到每个libraryDepencies行。我试过这个,它对我有用。
答案 2 :(得分:0)
告诉SBT SLF4J为provided
,SBT不会将其添加到classpath
。为此,请将以下内容添加到libraryDependencies
:
"org.slf4j" % "slf4j-simple" % "1," Provided
各种依赖关系(或其传递依赖关系)可能会引用不同版本的SLF4J。这就是我使用Ivy version range matcher的原因。您可能会发现您需要的实际版本匹配器是我写的内容的一些变体。
答案 3 :(得分:0)
如果您的目标是从项目中排除依赖项,则@YourBestBet和@goozez提供的答案都是正确的。
在我的项目中,我有多个依赖项,其中包括slf4j
,它们相互冲突。
一个简单的解决方法(但很麻烦,具体取决于您拥有的依赖项数量)是手动将其从冲突的依赖项中排除,而不是根据需要将其从项目中完全删除。
"org.elasticsearch" % "elasticsearch" % esVersion exclude("org.slf4j", "*"),