Я запускаю несколько контейнеров докеров перед запуском run, чтобы начать свой проект play-framework:
run in Compile := (run in Compile dependsOn(dockerComposeUp)).evaluated
Теперь я хотел бы снести все контейнеры докеров с помощью dockerComposeDown, когда воспроизведение остановится. Любые идеи о том, как это сделать?
Я уже прошел через Что-то делать после задачи ввода, но это запускает контейнеры и немедленно останавливает их снова. (Фактически, он даже останавливает контейнеры перед их запуском.) Вот что я пробовал:
run in Compile := {
(run in Compile dependsOn(dockerComposeUp)).evaluated
dockerComposeDown.value
}





Другой подход - последовательно вызывать задачу докера для запуска задачи. Вы можете добиться этого, как описано ниже:
lazy val testPrint = taskKey[Unit]("showTime")
testPrint := {
println("Test print.")
}
lazy val testRun = taskKey[Unit]("test build")
testRun := {
Def.sequential((runMain in Compile).toTask(" com.mycompany.MainClass "), testPrint).value
}
Сначала определите задачу testPrint, которая в вашем случае может быть dockerTask, а затем определите testRun, который будет запускать обе задачи последовательно. Для запуска просто выполните sbt testRun. После выполнения он должен распечатать «Пробную печать».
Итак, вы переназначили запуск в Compile на самом деле :) perfect
Большое спасибо! В итоге я определил свою задачу
runкак:run in Compile := Def.sequential((run in Compile dependsOn(dockerComposeUp)).toTask(""), dockerComposeDown).value