多个项目的 Sbt 运行命令



我在一个目录中有多个项目,这些项目在 sbt 中聚合。我想在build.sbt中为sbt编写一个任务,这将在每个项目中发出一些命令。

lazy val P1 = (project in file("P1")
lazy val P2 = (project in file("P2")
lazy val cleanEverywhere = taskKey[Unit]("Clean everywhere")

我应该如何编写这个cleanEverywhere任务来清理每个项目?

另一种方法是按如下方式重组您的build.sbt


lazy val root = (project in file(".")).aggregate(p1, p2)
lazy val p1 = project.in(file("p1"))
lazy val p2 = project.in(file("p2"))

这样,每当您运行sbt cleansbt testsbt compile命令时,每个命令都将针对所有聚合项目执行,您无需创建cleanAll任务

如果你想要项目特定的命令,你可以像sbt p1/compile一样运行它

尝试

val cleanAll = taskKey[Unit]("Clean all projects")
cleanAll := clean.all(ScopeFilter(inAnyProject)).value

哪里all

在筛选器选择的所有范围内评估任务

inAnyProject沿项目轴选择所有范围。

最新更新