34

How would you exclude a transitive dependency globally? My project depends on a lot of the Twitter libraries or on libraries that depend on the Twitter libraries. I don't want slf4j-jdk14 in my classpath, no matter what (I use logback as slf4j binding).

Currently I do this:

"com.twitter" %% "finagle-thriftmux" % "6.16.0" exclude("org.slf4j", "slf4j-jdk14")

but every time someone adds another dependency that uses slf4j-jdk14 I might get it back into the classpath.

Daniel Olszewski
  • 13,995
  • 6
  • 58
  • 65
reikje
  • 2,850
  • 2
  • 24
  • 44

3 Answers3

50

excludeDependencies += "org.slf4j" % "slf4j-jdk14"

Jeffrey Aguilera
  • 1,284
  • 11
  • 8
49

Since sbt 0.13.8

In sbt 0.13.8 there is possibility to exclude dependencies globally. Here is a compact example:

excludeDependencies += "org.slf4j" % "slf4j-jdk14"

However, at the moment of writing this feature was marked as experimental so it's wise to be aware of older solution.

Before sbt 0.13.8

For a group of dependencies you can do it as follows:

libraryDependencies ++= Seq(
  "com.twitter" %% "finagle-thriftmux" % "6.16.0",
  "com.twitter" % "lib" % "2.0",
  "com.domain" % "some-other-lib" % "1.0"
).map(_.exclude("org.slf4j", "slf4j-jdk14"))
Daniel Olszewski
  • 13,995
  • 6
  • 58
  • 65
6
libraryDependencies := libraryDependencies.value.map(_.exclude("groupid", "artifactname"))
nafg
  • 2,424
  • 27
  • 25