如何在sbt中使用fullRunTask进行fork进程?

时间:2014-07-06 19:57:15

标签: 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 个答案:

答案 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()将一直阻止,直到该过程存在。

如果您希望它在后台运行,我认为您必须自己控制该过程。