【问题标题】:How to fork process with fullRunTask in sbt?如何在 sbt 中使用 fullRunTask 分叉进程?
【发布时间】:2014-07-07 05:14:20
【问题描述】:

我正在编写一个从 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 :(

看起来进程没有分叉什么的。

【问题讨论】:

  • 我认为您在单独的 JVM 中运行您的服务器,您遇到的问题是 sbt 会等待进程退出,然后再让您输入任何其他内容。请参阅GitHub 上的相关代码部分
  • 是的,您是对的,您可以添加您的评论作为答案吗?以sbt-revolver 为例

标签: sbt


【解决方案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()会阻塞直到进程存在。

我认为如果你想让它在后台运行,你必须自己控制这个过程。

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2015-02-03
    • 1970-01-01
    • 2015-11-05
    • 2015-03-29
    • 2020-07-19
    相关资源
    最近更新 更多