SBT如何指定命令执行线程数?是否有类Maven -T <num_threads>的并行依赖下载方式?
嘿,刚好对SBT的并行配置这块比较熟,来给你逐个解答:
1. 执行任意SBT命令时指定线程数量
SBT里可以通过两种方式来控制命令执行时的线程/并行任务数:
- 命令行临时指定:直接在启动SBT时加上JVM系统属性参数,比如要指定4个并行任务线程,可以这么写:
这个参数会全局控制SBT任务的并行执行线程数,适合临时调整。sbt -Dsbt.parallel.tasks=4 compile - 在构建文件中持久化配置:如果想让项目默认就用并行执行,可以在
build.sbt里添加:
要是只想针对特定任务(比如测试)设置,就把// 全局开启并行任务执行 parallelExecution in ThisBuild := true // 控制最大并行任务数(部分任务如测试还需单独配置) maxParallelForks in Global := 4Global换成对应的作用域,比如Test。
2. SBT是否有类似Maven
-T <num_threads>的选项? 有的!Maven的-T是用来控制并行构建的线程数,SBT里对应的就是上面提到的-Dsbt.parallel.tasks=<num>命令行参数,用法和Maven的-T类似,都是启动时指定临时的并行线程数。
另外,如果你希望项目默认启用并行构建,不用每次加命令行参数,就把parallelExecution in ThisBuild := true加到build.sbt里,再配合maxParallelForks设置最大线程数,效果就和Maven里持久化配置并行构建差不多。
3. 配置SBT并行下载依赖
SBT默认支持依赖并行下载,但默认的线程数可能不多,你可以通过两种方式调整:
- 命令行临时设置:启动SBT时加上:
这里的sbt -Dsbt.update.threads=88就是你想要的并行下载线程数,按需调整就行。 - 持久化配置到构建文件:在
build.sbt里添加:
这样每次执行updateOptions := updateOptions.value.withParallelDownloads(8)update或者需要下载依赖的命令时,都会用8个线程并行下载,效率会高很多。
内容的提问来源于stack exchange,提问作者MozenRath
相关产品推荐
相关产品推荐

