2016-03-26 8 views
4

Ich habe eine Abhängigkeit von Dritten in meinem Projekt spielen. Diese Third-Party-Library hat eventuell eine Abhängigkeit (nicht direkt) von einer slf4j-Implementierung.sbt Ausschluss slf4j funktioniert nicht

Ich erhalte doppelte Bindungsfehler für 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] 

Ich habe folgende Dinge versucht, aber kann den Fehler loswerden.

"com.orgname.platform" % "platform-metric-client" % "1.0.4" excludeAll(
    ExclusionRule(organization = "org.slf4j")) 

Ich habe auch versucht Ausschluss folgende

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

und auch diese

"com.orgname.platform" % "platform-metric-client" % "1.0.4" exclude("org.slf4j","slf4j-log4j12) 

Da war ich nicht in der Lage, die slf4j von Dritter Abhängigkeit I, zu entfernen müde, um das Spiel zu entfernen Abhängigkeit von slf4j, durch Änderung von projects/plugin.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.6" exclude("org.slf4j", "slf4j-simple")) 

Wie soll ich diese Warnung loswerden? Wie wirkt sich diese Warnung auf die Protokollierung aus? Welche Logging-Implementierung würde die Scala-Implementierung verwenden?

Antwort

1

IMHO, Egal ausschließen oder EXCLUDEALL es nur schließen slf4j Abhängigkeit von dieser Bibliothek, nicht slf4j Abhängigkeit von dem gesamten Projekt auszuschließen. Daher müssen alle Bibliotheksabhängigkeitszeilen, die möglicherweise transitiv von slf4j abhängen, exclude("org.slf4j","slf4j-log4j12) hinzufügen.

Eine schnelle und schmutzige Lösung ist exclude("org.slf4j","slf4j-log4j12) an jede libraryDepecies Linie anhängen. Ich habe es versucht, es hat für mich funktioniert.

2

Die Antwort von YourBestBet ist korrekt, aber Sie können sich etwas kopieren-einfügen, indem Sie die Reihenfolge der Importe mit den Ausschlüssen zuordnen.

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

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

SBT Sagen Sie, dass SLF4J provided und SBT wird es nicht zum classpath hinzuzufügen. Um dies zu erreichen, fügen Sie folgendes zu libraryDependencies:

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

Es ist möglich, dass verschiedene Abhängigkeiten (oder ihre transitiven Abhängigkeiten) könnten SLF4J mit unterschiedlichen Versionen verweisen. Deshalb habe ich eine Ivy version range matcher verwendet. Sie könnten feststellen, dass die tatsächliche Version Matcher Sie brauchen, ist eine Variation von dem, was ich geschrieben habe.

Verwandte Themen