#sbt
#sbt
Вопрос:
Я пишу плагин sbt, который запускает сервер из sbt.
lazy val kstart = taskKey[Unit]("Start scala kata")
lazy val Backend = config("backend")
Seq(
fullRunTask(kstart, Backend, "com.scalakata.backend.Boot", "..."),
fork in kstart := true,
connectInput in kstart := false
)
Проблема в том, что после запуска сервера у меня нет приглашения sbt.
> kstart
[info] Running com.scalakata.backend.Boot _
// no prompt here :(
Похоже, что процесс не разветвлялся или что-то в этом роде.
Комментарии:
1. Я думаю, что вы запускаете свой сервер в отдельной JVM, проблема, с которой вы сталкиваетесь, заключается в том, что sbt будет ждать завершения процесса, прежде чем позволить вам ввести что-либо еще. Смотрите соответствующую часть кода на GitHub
2. да, вы правы, можете ли вы добавить свой комментарий в качестве ответа? пример из sbt-revolver
Ответ №1:
Вы запускаете свой сервер в отдельной JVM, проблема, с которой вы сталкиваетесь, заключается в том, что sbt будет ждать завершения процесса, прежде чем разрешить вам вводить что-либо еще.
Смотрите соответствующую часть кода на GitHub.
// fork with Java because Scala introduces an extra class loader (#702)
val process = Fork.java.fork(configLogged, scalaOptions)
def cancel() = {
log.warn("Run canceled.")
process.destroy()
1
}
val exitCode = try process.exitValue() catch { case e: InterruptedException => cancel() }
Вызов process.exitValue()
будет блокироваться до тех пор, пока процесс не будет существовать.
Я думаю, вам придется самостоятельно управлять процессом, если вы хотите, чтобы он выполнялся в фоновом режиме.