正直まだsbtは理解できていない。まぁ依存性管理ツールはmakeにしろMSbuildにせよ複雑すぎて中をきちんと使いこなすとかできてなかったし。出来合スクリプトで困らんし。
なので専門家からするとまずいのかもしれないが、とりあえず既存のビルドの動きに何かを付け足すくらいの話向け。
- ちょこっと作業をまとめたバッチを作りたいだけなのよ→コマンドを使う
https://www.scala-sbt.org/1.x/docs/ja/Howto-Sequence-using-Commands.html
build.sbt
commands += Command.command("batchtest") { state => "testOnly somepackage.ValidationSpec > list.txt" :: "testOnly somepackage.ExecSpec >> list.txt" :: state } // commandsの使い方はよいがここでリダイレクトは使えないな。。。
2. タスクを作りたいのよ、タスクの前後にラベルを出したいのよ→ 単純なタスク作成
https://qiita.com/mtn81/items/ce482ed16a19f770cc68
3. sbtから外部コマンドを呼びたいのよ→ shell起動
https://www.scala-sbt.org/release/docs/Process.html
lazy val batch = taskKey[Unit]("外部バッチ")
batch in Test := {"powershell.exe ls " !}
lazy val batch = taskKey[Unit]("外部バッチ")
batch in Test := {"powershell.exe ls " !}
4. 依存関係は悩まずにタスクからタスクを呼びたいのよ→ runTask, runInputTask
https://stackoverflow.com/questions/32142055/how-to-call-sbt-inputtask-dynamically
build.sbt
lazy val batch2 = taskKey[Unit]("ドキュメント生成呼び")
batch2 in Test := (doc in Test).value
lazy val batch3 = taskKey[Unit]("テスト1つだけ呼び")
batch3 in Test := (testOnly in Test).toTask(" somepackage.ValidationSpec").value
(↑ toTask(" の部分のスペースが重要)
build.sbt
lazy val batch2 = taskKey[Unit]("ドキュメント生成呼び")
batch2 in Test := (doc in Test).value
lazy val batch3 = taskKey[Unit]("テスト1つだけ呼び")
batch3 in Test := (testOnly in Test).toTask(" somepackage.ValidationSpec").value
(↑ toTask(" の部分のスペースが重要)
5. 依存関係は悩まずにタスクでタスクを連続実行させたいのよ→Def.sequential
https://www.scala-sbt.org/1.x/docs/ja/Howto-Sequential-Task.html
build.sbt
lazy val batch4 = taskKey[Unit]("タスク連続")
batch4 in Test := {
Def.sequential(
Def.task {
"powershell.exe date" !
} ,
Def.task {
(testOnly in Test).toTask(" somepackage.ValidationSpec").value
).value
}
build.sbt
lazy val batch4 = taskKey[Unit]("タスク連続")
batch4 in Test := {
Def.sequential(
Def.task {
"powershell.exe date" !
} ,
Def.task {
(testOnly in Test).toTask(" somepackage.ValidationSpec").value
).value
}
6. プロジェクトにREPL代わりに書いたAppコードをsbtから呼びたいのよ→_runMain_
Hello.scala
package tools
object Hello extends App {
println("Hello")
}
Hello.scala
package tools
object Hello extends App {
println("Hello")
}
build.sbt
lazy val batch5 = taskKey[Unit]("内部ツール呼び出し")
batch5 in Test := (runMain in Test).toTask(" tools.Hello").value
(↑ toTask(" の部分のスペースが重要)
build.sbt
lazy val batch5 = taskKey[Unit]("内部ツール呼び出し")
batch5 in Test := (runMain in Test).toTask(" tools.Hello").value
(↑ toTask(" の部分のスペースが重要)