2012-06-09 3 views
37

Mein scala/sbt Projekt verwendet grizzled-slf4j und logback. Eine Abhängigkeit von Drittanbietern verwendet Apache Commons Logging.Wie kann man Commons-Logging von einem scala/sbt/slf4j-Projekt ausschließen?

Mit Java/Maven würde ich jcl-über-slf4j und logback-classic verwenden, so dass ich Logback als das einheitliche Logging-Backend verwenden kann.

Ich würde auch die commons-logging Abhängigkeit, dass die Dritt lib sbt in ziehen würde beseitigen lassen ich die folgenden in Maven (die von http://www.slf4j.org/faq.html#excludingJCL empfohlen).

<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.1.1</version> 
    <scope>provided</scope> 
</dependency> 

Und die Frage ist, , wie man das selbe mit sbt macht?

Antwort

55

Heikos Ansatz wird wahrscheinlich funktionieren, aber wird dazu führen, dass keine der Abhängigkeiten der 3rd Party Lib heruntergeladen werden. Wenn Sie nur einen bestimmten ausschließen möchten, verwenden Sie exclude.

libraryDependencies += "foo" % "bar" % "0.7.0" exclude("org.baz", "bam") 

oder

... excludeAll(ExclusionRule(organization = "org.baz")) // does not work with generated poms! 
+25

Es funktioniert. Und meine letzte Lösung ist 'libraryDependencies ++ = Seq (...). Map (_. Exclude (" commons-logging "," commons-logging "))' – wks

+3

Die Dokumentation dafür finden Sie hier: http: // www .scala-sbt.org/release/docs/Detailed-Topics/Bibliothek-Management # exclude-transitive-dependencies –

+0

Es ist eigentlich 'ExclusionRule' und nicht' ExclusionRules' – jeffreyveon

2

Fügen Sie intransitive Ihre 3rd-Party-Bibliothek Abhängigkeit, z.

+7

downvoted, kann dazu führen, führen zu den Problemen, wenn Sie mehr als eine Drittparteiabhängigkeiten haben, wie Drexin bemerkte, Entschuldigung. –

+0

Diese Lösung funktionierte tatsächlich für mich (entfernte alle 3rd-Party-Abhängigkeiten für 1 explizite Abhängigkeit). –

4

traf ich das gleiche Problem vor. Gelöst es durch Abhängigkeit Zugabe wie

libraryDependencies += "foo" % "bar" % "0.7.0" exclude("commons-logging","commons-logging") 

oder

libraryDependencies += "foo" % "bar" % "0.7.0" excludeAll(ExclusionRule(organization = "commons-logging")) 
8

Für sbt 0.13.8 und oben können Sie auch versuchen, die Projektebene Abhängigkeit Ausgrenzung:

excludeDependencies += "commons-logging" % "commons-logging" 
Verwandte Themen