sbt 测试范围包括运行时?

sbt Test scope includes Runtime?

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

我想要的设置:

相关 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 绑定,另一个是简单绑定。

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

提炼问题:我想在 运行time 与测试时使用几个不同的 jar,它们是互斥的。这如何在 sbt 0.13 中完成?

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

您可以像这样尝试从测试类路径中排除 log4j-slf4j-impl

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