如何在执行sbt 'allImages / Docker / stage'时完全跳过测试编译?
如何在sbt聚合项目中跳过测试编译
问题背景
我正在执行命令:
$ sbt 'allImages / Docker / stage'
使用的项目配置如下:
lazy val allImages = project .in(file("build/all-images")) .aggregate(p1, p2) .settings( Test / testOptions := Seq(Tests.Filter(_ => false)), )
当前遇到的问题:
Test / testOptions := Seq(Tests.Filter(_ => false))仅能跳过测试运行,无法跳过测试代码的编译- 全局设置
ThisBuild / Test / compile / skip := true可以忽略所有模块的测试编译,但在allImages的.settings中直接配置Test / compile / skip := true没有效果
解决方案
因为sbt的聚合项目本身不会自动将设置传递给子项目,若只想让allImages聚合的p1、p2子项目跳过测试编译,有两种常用方式:
方式1:在聚合项目中显式指定子项目的设置
直接在allImages的settings中为每个子项目配置跳过测试编译:
lazy val allImages = project .in(file("build/all-images")) .aggregate(p1, p2) .settings( Test / testOptions := Seq(Tests.Filter(_ => false)), // 为p1、p2子项目设置跳过测试编译 p1 / Test / compile / skip := true, p2 / Test / compile / skip := true )
方式2:定义通用设置批量应用到子项目
如果有多个子项目需要配置,可以先定义一个通用设置,再应用到每个子项目:
// 定义通用的跳过测试编译设置 lazy val skipTestCompile = Def.settings(Test / compile / skip := true) // 子项目应用该设置 lazy val p1 = project.settings(skipTestCompile) lazy val p2 = project.settings(skipTestCompile) lazy val allImages = project .in(file("build/all-images")) .aggregate(p1, p2) .settings( Test / testOptions := Seq(Tests.Filter(_ => false)) )
配置完成后,执行sbt 'allImages / Docker / stage'时,p1和p2的测试代码将不会被编译。
内容的提问来源于stack exchange,提问作者TheDIM47
相关产品推荐
相关产品推荐

