我在一个目录中有多个项目,这些项目在 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 clean
、sbt test
、sbt compile
命令时,每个命令都将针对所有聚合项目执行,您无需创建cleanAll
任务
如果你想要项目特定的命令,你可以像sbt p1/compile
一样运行它
尝试
val cleanAll = taskKey[Unit]("Clean all projects")
cleanAll := clean.all(ScopeFilter(inAnyProject)).value
哪里all
在筛选器选择的所有范围内评估任务
inAnyProject
沿项目轴选择所有范围。