从sbt任务中的stdin读取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从sbt任务中的stdin读取相关的知识,希望对你有一定的参考价值。

假设我有以下代码

object Cli extends App {
  Iterator.continually(StdIn.readLine()).takeWhile(!_.equals("quit")).foreach { command =>
    println(s"[$command RESULT] " + ApiClient.executeCommand(command))
  }
}

和自定义sbt命令

val cli = inputKey[Unit]("Run client")
cli := {
  "java -cp my.jar Cli".!
}

如果我从控制台运行“java -cp my.jar Cli”,它可以正常工作。但是当我调用“sbt cli”时,它会因NullPointerException而失败

Exception in thread "main" java.lang.NullPointerException
        at Cli$$anonfun$2.apply(Cli.scala:14)

如何定义sbt任务从stdin读取命令?

答案

将其添加到build.sbt

fork := true

http://www.scala-sbt.org/1.x/docs/Forking.html

以上是关于从sbt任务中的stdin读取的主要内容,如果未能解决你的问题,请参考以下文章

Python asyncio子进程连续写入stdin和读取stdout/stderr

从 URL 下载/获取文件的 SBT 任务

非托管 jar 文件中的 SBT 插件

将stdin设置为C中的文件时如何从键盘读取

从 SBT 任务中下载编译和发布

SBT 中的排序和覆盖任务