如何从scala / sbt / slf4j项目中排除commons-logging?

时间:2012-06-09 03:51:13

标签: scala sbt slf4j

我的scala / sbt项目使用了grizzled-slf4j和logback。第三方依赖项使用Apache Commons Logging。

使用Java / Maven,我会使用jcl-over-slf4j和logback-classic,这样我就可以使用logback作为统一的日志记录后端。

我还会消除第三方lib允许sbt拉入的commons-logging依赖。我在Maven中执行以下操作(由http://www.slf4j.org/faq.html#excludingJCL推荐):

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

问题是,如何对sbt做同样的事情?

4 个答案:

答案 0 :(得分:63)

Heiko的方法可能会起作用,但会导致第三方lib的依赖关系无法下载。如果您只想排除特定的一个,请使用exclude

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

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

答案 1 :(得分:14)

对于sbt 0.13.8及更高版本,您还可以尝试项目级依赖项排除:

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

答案 2 :(得分:4)

添加不及物您的第三方库依赖关系,例如

libraryDependencies += "foo" %% "bar" % "1.2.3" intransitive

答案 3 :(得分:4)

之前我遇到过同样的问题。通过添加依赖性来解决它,如

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

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