我正在编写一个从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 :(
看起来这个过程没有分叉或什么的。
答案 0 :(得分:2)
您在一个单独的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()
将一直阻止,直到该过程存在。
如果您希望它在后台运行,我认为您必须自己控制该过程。