sbtで特定のprojectを含めた依存project全体に対してtask実行する

昔似たような違うものを使ったことがありますが、違うものです

xuwei-k.hatenablog.com

xuwei-k.hatenablog.com

cleanのものとは依存を辿る向きが逆ですね。

val a1 = project
val a2 = project.dependsOn(a1)

val b1 = project.dependsOn(a2)
val b2 = project.dependsOn(b1)
val b3 = project.dependsOn(b2)

val c1 = project.dependsOn(a2)
val c2 = project.dependsOn(c1)

graph

上記のような状態のprojectがあったとき

  • b1を変更した
  • その際に、影響あるところだけをcompileまたはtestしたい
  • b1をcompileすれば、依存したa1, a2は、どうせ勝手にcompileはされる
  • しかしa1, a2, c1, c2のtestは必要ないはず
  • c1やc2はcompileすら必要ないはず
  • b2やb3はcompileやtestしたい

みたいな需要。上記の(逆に辿る)依存を、project多すぎると手動で頑張るの辛いので、自動で導出したい。

よって作ったものが以下

  • 以前作ったtaskAllのコードや仕組みを半分以上流用
  • 以下taskAllと同じで
    • task名やsub project名もtab補完もされるように
    • sub project名は複数指定可能
    • 正規表現あるいはstartsWithで、いい感じに複数指定可能

ちなみにbuild.sbtでは dependsOn(a2 % "test") などのConfiguration指定でdependsOnが可能ですが、そこの部分は面倒なので見ていません

https://gist.github.com/xuwei-k/bbe794441c99984f9d1a6cdb0dbe41bd

gist.github.com