sbt dependentOn % "编译->编译;测试->测试"

M.G*_*.G. 2 scala sbt

我一直试图理解“compile->compile;test->test”的用途,但是在阅读 sbt 页面后我仍然不明白它......

假设我在 build.sbt 中有这个

lazy val `api` = project.dependsOn(`domain` % "compile->compile;test->test")
...
lazy val `domain` = project...
Run Code Online (Sandbox Code Playgroud)

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

lazy val `api` = project.dependsOn(`domain`)
...
lazy val `domain` = project...
Run Code Online (Sandbox Code Playgroud)

如果我只输入“测试->测试”怎么办?或者“编译->编译”?

Mar*_*lic 7

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

show api / Test / dependencyClasspath
show api / Compile / dependencyClasspath
Run Code Online (Sandbox Code Playgroud)

这将揭示确切的类路径。

如果我删除“编译->编译;测试->测试”

lazy val api = project.dependsOn(domain)
Run Code Online (Sandbox Code Playgroud)

相当于

lazy val api = project.dependsOn(domain % "compile->compile")
Run Code Online (Sandbox Code Playgroud)

和 意味着api / Compile配置取决于domain / Compile. 如果执行show api / Test / dependencyClasspath ,您应该看到domain的测试类路径不存在。

如果我只输入“测试->测试”怎么办?

lazy val api = project.dependsOn(domain % "test->test")
Run Code Online (Sandbox Code Playgroud)

手段api / Test取决于domain / Test并且执行show api / Test / dependencyClasspath应该显示存在的类路径domaintest然而执行show api / Compile / dependencyClasspath应该显示domaincompile类路径不存在。

因此,如果您想api / Test 依赖domain / Testapi / Compile依赖domain / Compile,那么您必须指定

lazy val api = project.dependsOn(domain % "compile->compile;test->test")
Run Code Online (Sandbox Code Playgroud)