sbt 取决于 % "compile->compile;test->test"

sbt dependsOn % "compile->compile;test->test"

我一直在努力理解“compile->compile;test->test”是干什么用的,但是看了sbt页面后我还是不明白...

假设我在 build.sbt

中有这个
lazy val `api` = project.dependsOn(`domain` % "compile->compile;test->test")
...
lazy val `domain` = project...

如果我删除“compile->compile;test->test”有什么区别

lazy val `api` = project.dependsOn(`domain`)
...
lazy val `domain` = project...

如果我只放“test->test”怎么办?还是“编译->编译”?

查看正在发生的事情的有用命令是

show api / Test / dependencyClasspath
show api / Compile / dependencyClasspath

这将揭示确切的类路径。

if I remove "compile->compile;test->test"

lazy val api = project.dependsOn(domain)

等同于

lazy val api = project.dependsOn(domain % "compile->compile")

表示 api / Compile 配置取决于 domain / Compile。如果你执行 show api / Test / dependencyClasspath 那么你应该看到 domain 的测试类路径不存在。

What if I only put "test->test"?

lazy val api = project.dependsOn(domain % "test->test")

意味着 api / Test 依赖于 domain / Test 并且执行 show api / Test / dependencyClasspath 应该显示 domaintest 类路径存在。但是执行 show api / Compile / dependencyClasspath 应该会显示 domaincompile 类路径不存在。

因此如果你想让api / Test 依赖于domain / Test,而api / Compile依赖于domain / Compile,那么你必须指定

lazy val api = project.dependsOn(domain % "compile->compile;test->test")