sbt query
sbt 2.x 扩展了斜杠语法以支持子项目聚合:
act ::= [ query / ] [ config / ] [ in-task / ] ( taskKey | settingKey )
换言之,sbt query 是编写子项目轴的新方式。
子项目引用
子项目引用作为查询来选择子项目:
对于上述构建,我们可以按以下方式在 foo 子项目上运行测试,语法与 sbt 1.x 相同:
foo/test
... 通配符
... 通配符可匹配任意字符,并可与其他字母和数字组合以筛选根聚合列表。例如,我们可以按以下方式在所有以 foo 开头的子项目上运行测试:
foo.../test
sbt query 有意使用 ...(省略号)而非更直观的 *(星号),因为 * 在 shell 中常被用作通配符来匹配现有文件或目录。这需要加引号,而忘记给 */test 加引号会匹配到类似 src/test 的内容。
@scalaBinaryVersion 参数
@scalaBinaryVersion 参数与子项目的 scalaBinaryVersion 设置匹配。
val toolkitV = "0.5.0"
val toolkit = "org.scala-lang" %% "toolkit" % toolkitV
lazy val foo = projectMatrix
.settings(
libraryDependencies += toolkit,
)
.jvmPlatform(scalaVersions = Seq("3.8.1", "2.13.17"))
lazy val bar = projectMatrix
.settings(
libraryDependencies += toolkit,
)
.jvmPlatform(scalaVersions = Seq("3.8.1", "2.13.17"))
例如,我们可以按以下方式在所有 3.x 子项目上运行测试:
...@scalaBinaryVersion=3/test
可以从终端按以下方式使用:
$ sbt ...@scalaBinaryVersion=3/test
[info] entering *experimental* thin client - BEEP WHIRR
[info] terminate the server with `shutdown`
> ...@scalaBinaryVersion=3/test
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] No tests to run for Test / testQuick
[info] compiling 1 Scala source to /tmp/foo/target/out/jvm/scala-3.6.4/foo/test-backend ...
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] No tests to run for bar / Test / testQuick
example.ExampleSuite:
+ Scala version 0.003s
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
这使我们能够筛选聚合的子项目,使用 projectMatrix 时子项目可能很多。