除非在该项目中运行,否则sbt跳过子项目中的测试?

时间:2012-03-24 22:29:52

标签: scala sbt

我有一个包含多个子项目的SBT项目。其中一个子项目有我不想运行的测试,除非我明确地执行类似“; project xyz; test-only”之类的操作。所以,如果我的项目结构是:

主 主/ ABC 主/ DEF 主/ XYZ

理想情况下,在main中运行“test”会执行main,main / abc和main / def项目中的任何测试,但不会执行main / xyz。

我尝试在主类的构建文件中添加一个测试过滤器,它排除main / xyz中的所有测试(按包名称),然后在main / xyz项目中添加一个单独的build.sbt文件以将其添加回来,但这仍然导致测试从顶级项目执行......

1 个答案:

答案 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-onlytest-only项目运行xyz,而无需更改为该项目。