2015-04-09 2 views
7

Ich habe eine wirklich harte Zeit mit Ausnahme logback von meinem Spiel 2.3.8 Testlauf. Ich habe viele Ausschlussregeln ausprobiert, aber nichts scheint zu funktionieren. Ich kann es auch nicht in meinem Abhängigkeitsbaum finden. Schnipsel aus meiner sbt-Datei:spielen 2.3.8 sbt ohne Logback

[...] 
resolvers ++= Seq(
    "Typesafe repository snapshots" at "http://repo.typesafe.com/typesafe/snapshots/", 
    "Typesafe repository releases" at "http://repo.typesafe.com/typesafe/releases/", 
    "Sonatype repo"     at "https://oss.sonatype.org/content/groups/scala-tools/", 
    "Sonatype releases"    at "https://oss.sonatype.org/content/repositories/releases", 
    "Sonatype snapshots"    at "https://oss.sonatype.org/content/repositories/snapshots", 
    "Sonatype staging"     at "http://oss.sonatype.org/content/repositories/staging", 
    "Java.net Maven2 Repository"  at "http://download.java.net/maven/2/", 
    "Twitter Repository"    at "http://maven.twttr.com", 
    "Websudos releases"    at "http://maven.websudos.co.uk/ext-release-local" 
) 

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
).map(_.exclude("org.slf4j", "slf4j-jdk14")) 
    .map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback"))) 
    .map(_.excludeAll(ExclusionRule(organization = "QOS.ch"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback*"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback-classic"))) 
    .map(_.exclude("ch.qos.logback", "logback-parent")) 
    .map(_.exclude("ch.qos.logback", "logback-core")) 
    .map(_.exclude("QOS.ch", "logback-parent")) 
    .map(_.exclude("", "logback-classic")) 
} 

Es ist nicht in der Abhängigkeitsbaum aus irgendeinem Grund:

$ activator "inspect tree test" |grep -i qos |wc -l 
    0 
$ activator "inspect tree test" |grep -i logback |wc -l 
    0 

Doch wenn ich den Test ausführen, es zeigt sich!

$ activator test 
[...] 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/Users/X/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/Users/X/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 

Ich bin am Ende meines Wissens. Hilfe.

Antwort

-1

Es gibt einen besseren Weg, dies zu tun. Zuerst sollten Sie herausfinden, welche Abhängigkeit das Problem verursacht.

Fügen Sie diese auf plugins.sbt:

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.5") 

Jetzt haben Sie einen neuen Befehl in sbt verfügbar, nämlich whatDependsOn. Mit diesem können Sie Versuch:

whatDependsOn ch.qos.logback logback-classic 1.1.1

Dann würde ich die Abhängigkeit von den genauen Ort vorschlagen entfernen, nicht die gesamte Konfiguration Abbildung:

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion excludeAll(
     ExclusionRule(...) 
    ), 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
) 
) 
+0

Ich habe das Plugin von 0.7.4 auf 0.7.5 aktualisiert, und habe immer noch '[Fehler] Kein gültiger Befehl: whatDependsOn' – kumetix

+0

@ Kumetix verwenden Sie den Befehl wie folgt:' sbt 'whatDependsOn ch.qos.logback logback -classic 1.1.1'' Es hat keine sehr schönen Fehlermeldungen, aber es funktioniert –

+0

@flavian Dies schließt immer noch nicht logback-classic – Woodz

0

Ich habe festgestellt, dass die Ausschlüsse der Verkettungs Zugabe von libraryDependencies nicht funktioniert, dh

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
).map(_.exclude("org.slf4j", "slf4j-jdk14")) 
    .map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback"))) 
    .map(_.excludeAll(ExclusionRule(organization = "QOS.ch"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback*"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback-classic"))) 
    .map(_.exclude("ch.qos.logback", "logback-parent")) 
    .map(_.exclude("ch.qos.logback", "logback-core")) 
    .map(_.exclude("QOS.ch", "logback-parent")) 
    .map(_.exclude("", "logback-classic")) 
} 

Stattdessen fügen Sie die Ausschlüsse, die ohne PapieremitFunktion (http://www.scala-sbt.org/0.13.12/api/index.html#sbt.SettingKey) auf der folgenden Zeile nach neuen Abhängigkeiten hinzufügen, dh

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
) 

libraryDependencies ~= { _.map(_.exclude("org.slf4j", "slf4j-jdk14")) 
    .map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback"))) 
    .map(_.excludeAll(ExclusionRule(organization = "QOS.ch"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback*"))) 
    .map(_.excludeAll(ExclusionRule(artifact = "logback-classic"))) 
    .map(_.exclude("ch.qos.logback", "logback-parent")) 
    .map(_.exclude("ch.qos.logback", "logback-core")) 
    .map(_.exclude("QOS.ch", "logback-parent")) 
    .map(_.exclude("", "logback-classic")) 
} 

Ich weiß nicht, warum dieses unterschiedliche Verhalten gibt, aber mit Play-Framework 2.4.3 und SBT 0.13.8 dies schließt erfolgreich logback- klassisch und slf4j.

Beachten Sie, dass Sie Kette ausschließen und EXCLUDEALL Methode ruft immer wieder zu vermeiden, ruft map so können Sie Ihren Code zu vereinfachen:

libraryDependencies ++= { 
    val phantomVersion = "1.5.0" 
    Seq(
    "net.jpountz.lz4" % "lz4" % "1.3.0", 
    "org.xerial.snappy" % "snappy-java" % "1.1.1.6", 
    "com.websudos" %% "phantom-dsl" % phantomVersion, 
    "com.websudos" %% "phantom-testing" % phantomVersion % Test, 
    "org.scalatestplus" %% "play" % "1.2.0" % Test, 
    "org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test 
) 

libraryDependencies ~= { _.map(_ 
    .exclude("org.slf4j", "slf4j-jdk14")) 
    .exclude("ch.qos.logback", "logback-classic")) 
} 

Edit: Nach einer weiteren Untersuchung, glaube ich, dass dies erforderlich ist, da die libraryDependencies bereits Enthalten Sie logback-classic aus dem Play-Plug-in, bevor Sie die Datei build.sbt analysieren. Sie können die Bibliotheken in plugin.sbt ausschließen, aber wenn Sie das PlayScala-Plugin von enablePlugins(PlayScala) (https://www.playframework.com/documentation/2.5.x/NewApplication) verwenden, kann dies nicht ausgeschlossen werden, so dass Sie die Ausschlüsse separat hinzufügen müssen.

+0

thx für Ihre Antwort aus. Ich werde keine Zeit haben, um die Richtigkeit für eine Weile zu überprüfen. –