我有一个包含多个子项目的SBT项目。其中一个子项目有我不想运行的测试,除非我明确地执行类似“; project xyz; test-only”之类的操作。所以,如果我的项目结构是:
主 主/ ABC 主/ DEF 主/ XYZ
理想情况下,在main中运行“test”会执行main,main / abc和main / def项目中的任何测试,但不会执行main / xyz。
我尝试在主类的构建文件中添加一个测试过滤器,它排除main / xyz中的所有测试(按包名称),然后在main / xyz项目中添加一个单独的build.sbt文件以将其添加回来,但这仍然导致测试从顶级项目执行......
答案 0 :(得分:5)
“聚合”是使test
在其他项目(称为聚合项目或“执行依赖项”)以及当前项目上执行的功能的名称。您可以在Multi-Project Builds页面上找到更多信息。
我会在“主”项目中创建一个自定义任务,该任务取决于您要运行的任务。例如,
myTestTask <<= Seq(
test in (main, Test),
test in (abc, Test),
test in (deff, Test)
).dependOn
其中val myTestTask = TaskKey[Unit]("my-test-task")
和main, abc, and deff
是对您的项目的引用。
聚合仅适用于命令行中指定的顶级任务。因此,如果您调用my-test-task
,那将是唯一聚合的任务(在这种情况下,它不会在任何子项目上定义,因此不会通过聚合添加任务)。特别是,它的依赖项(明确列出的test
任务)不会被聚合。结果是,当您致电test in xyz
时,my-test-task
无法执行。
最后,请注意,您可以说xyz/test-only
为test-only
项目运行xyz
,而无需更改为该项目。