sbtですべてのsub projectの特定のtaskを直列に実行するtaskを自動でつくる

要点をまとめると

  • TaskではなくCommandでやってしまうなら少し簡単だが、(stateなどの他のkeyに依存して)taskからtaskを生成するには多少コツがいる(Def.taskDynを使う)
  • なおかつ、sub projectの列挙を全自動でやりつつtaskを生成するのが多少コツがいる( Project.extractして、.structure.allProjectRefsする部分)

みたいな感じなんですが、とりあえずもう答を貼っておきます。すでに誰か作っていそうな気もするので、そしたら教えて下さい

gist.github.com

"sub projectの列挙を全自動で" は(自分にとっては)とても重要で、なぜかというと、仕事でこれ必要になったんですが、仕事のprojectはmonorepoでsbtのprojectが、このblog書いてる時点で81個あるので(今後も増える可能性あり)、明示的に列挙なんて絶対にやりたくない、という理由です。