sbt测试范围包括运行时?

时间:2017-05-03 23:28:47

标签: scala sbt slf4j log4j2

我在SBT应用程序中配置SLF4J,测试与运行时范围的工作方式与我预期的不同。

我想要的设置:

  • tests(sbt test):使用slf4-simple作为实现
  • 捆绑/生产运行时(sbt run):使用log4j-slf4j-impl

相关build.sbt(sbt 0.13)部分:

libraryDependencies += "org.slf4j" % "slf4j-simple" % "1.7.25" % Test,
libraryDependencies += "org.apache.logging.log4j" % "log4j-api" % 2.8.2 % Runtime,
libraryDependencies += "org.apache.logging.log4j" % "log4j-core" % 2.8.2 % Runtime,
libraryDependencies += "org.apache.logging.log4j" % "log4j-slf4j-impl" % 2.8.2 % Runtime

我得到的错误是存在两个slf4j绑定,log4j一个和简单。

我想知道如何从测试范围中排除运行时依赖项,或者这是否是错误的方法。

提炼问题:我想在运行时与测试中使用几个不同的罐子,这些罐子是相互排斥的。如何在sbt 0.13中完成?

1 个答案:

答案 0 :(得分:1)

问题是测试范围包括编译和推测运行时。因此,您在Runtime中添加的任何内容也会在Test中添加。

您可以尝试从Test类路径中排除log4j-slf4j-impl,如下所示:

fullClasspath.in(Test) := fullClasspath.in(Test).value.filterNot(_.data.getName.contains("log4j-slf4j-impl"))