You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:27:11