最も頻繁に寄せられる質問の1つは、「sbtでXを実行してからYを実行するにはどうすればよいですか?」という形式です。
一般的に言って、sbtタスクはそう設定されていません。build.sbtは、タスクの依存関係グラフを定義するためのDSLです。これはタスクの実行セマンティクスで説明されています。そのため、理想的には、タスクYを自分で定義し、タスクXに依存する必要があります。
taskY := {
val x = taskX.value
x + 1
}
これは、次の例のように、副作用のある単純なScalaコードの命令型スタイルと比較して、より制約されています。
def foo(): Unit = {
doX()
doY()
}
依存関係指向のプログラミングモデルの利点は、sbtのタスクエンジンがタスクの実行順序を変更できることです。可能な場合は、依存するタスクを並列で実行します。もう1つの利点は、グラフの重複排除を行い、Compile / compile
などのタスク評価がコマンド実行ごとに1回呼び出されるように保証できることです。これは、同じソースを何度もコンパイルするのではなく、1回だけコンパイルすることを意味します。
タスクシステムは一般的にこのように設定されているため、何かをシーケンシャルに実行することは可能ですが、システムと少し戦うことになり、常に簡単とは限りません。