次のように.scala
ビルド定義を設定しています。
object build extends Build {
lazy val root = Project("main", file(".")) aggregate(benchmark)
lazy val benchmark = Project("benchmark", file("benchmark"))
}
タスクを実行する前にプロジェクトでre-start
タスクを実行する必要があります(そのため、確実にトリガーする必要があります)。そのような依存関係を指定する方法はありますか?main
run
benchmark
benchmark/run
main/re-start
編集:解決策を見つけたようですので、誰かが同じ問題に遭遇した場合に備えて、この質問に追加します。アイデアは、reStart タスクのカスタム バージョンを作成し、引数を解析する必要がないため、InputTask ではなく Task にすることです。完全な build.scala は次のとおりです。
import sbt._
import Keys._
import cc.spray.revolver.RevolverPlugin.Revolver._
import cc.spray.revolver.Actions._
import cc.spray.revolver.AppProcess
object build extends Build {
val noArgs = TaskKey[ExtraCmdLineOptions]("no-args")
val noArgsTask = TaskKey[ExtraCmdLineOptions]("no-args") := { ExtraCmdLineOptions(Nil, Nil) }
val reStartCustom = TaskKey[AppProcess]("re-start-custom")
val reStartTask = reStartCustom <<= (streams, state, reForkOptions, mainClass in reStart, fullClasspath in Runtime, reStartArgs, noArgs in root)
.map(restartApp)
.updateState(registerAppProcess)
.dependsOn(products in Compile)
lazy val root: Project = Project("main", file("."), settings = Defaults.defaultSettings ++ Seq(noArgsTask, reStartTask)) aggregate(benchmark)
lazy val benchmark: Project = Project("benchmark", file("benchmark"), settings = Defaults.defaultSettings ++ Seq(
run in Compile <<= (reStartCustom in root, run in Compile in benchmark) {
case (mainRestart, benchmarkRun) =>
benchmarkRun.mapTask { runTask => mainRestart.flatMap(_ => runTask) }
}
))
}