2012-03-24 60 views
3

我有一个有多个子项目的SBT项目。其中一个子项目有测试,我不想运行,除非我明确地做一些像“; project xyz; test-only”这样的东西。所以,如果我的项目结构是:sbt跳过子项目中的测试,除非在该项目中运行?

主要 主/ ABC 主/ DEF 主/ XYZ

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

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

回答

4

“聚集”是使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-onlyxyz项目运行test-only而不更改为该项目。

+0

稍作修改,我不得不使用诸如“test in abc” – jxstanford 2012-03-27 03:24:18