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

SBT任务调度:如何实现类似Gradle mustRunAfter的执行顺序规则?

在SBT中实现类似Gradle的mustRunAfter任务顺序约束

你可以通过配置SBT的任务执行顺序优先级来实现需求:当同时指定regenTestResource和test任务时,确保前者先执行;单独执行test时,不会触发资源重新生成任务。

具体实现

在你的build.sbt中添加以下配置:

lazy val regenTestResource = taskKey[Unit]("regenerate src/test/resources/my_file.txt")
regenTestResource := {
  s"${baseDirectory.value.getAbsolutePath}/regen_test_resource.sh" !
}

// 设置任务执行顺序约束:当两个任务都要执行时,regenTestResource必须在test之前运行
Global / executionOrder += regenTestResource -> (Test / test)

原理说明

  • executionOrder是SBT的全局设置,用于定义无依赖关系的任务之间的执行优先级。当两个任务同时出现在执行队列中时,SBT会按照这个配置的顺序来执行它们。
  • 这种方式不会给test任务添加硬依赖,因此单独执行sbt test时,regenTestResource不会被触发。
  • 当你执行sbt regenTestResource test时,SBT会严格保证regenTestResource执行完成后,才会启动test任务。

多模块项目适配

如果你的项目是多模块结构,可将作用域调整为全局构建级别,确保所有模块生效:

ThisBuild / executionOrder += regenTestResource -> (Test / test)

内容的提问来源于stack exchange,提问作者M. Justin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 15:52:27