Scala REPL in Gradle

时间:2016-02-25 15:51:20

标签: scala gradle classpath read-eval-print-loop

目前,Gradle的scala集成不提供REPL功能。如何使用适当的类路径从Gradle运行Scala REPL?

1 个答案:

答案 0 :(得分:13)

最小build.gradle

apply plugin: 'scala'

repositories{
  mavenCentral()
}

dependencies{
  compile "org.scala-lang:scala-library:2.11.7"
  compile "org.scala-lang:scala-compiler:2.11.7"
}

task repl(type:JavaExec) {
  main = "scala.tools.nsc.MainGenericRunner"
  classpath = sourceSets.main.runtimeClasspath
  standardInput System.in
  args '-usejavacp'
}

感谢this answer解释如何使用standardInput指示stdin并让REPL使用带有args的正确类路径。

请注意scala-compiler库是一个依赖项。找到scala.tools.nsc.MainGenericRunner的地方。

从控制台运行REPL需要许多选项:

  • --no-daemon,如果您使用的是Gradle守护程序。目前,如果从守护进程运行,REPL不会响应击键。

  • --console plain--quiet是一种受欢迎但较低级的选择。如果在没有这些选项之一的情况下运行,则REPL的提示会被Gradle的进度报告污染。 --console plain的优势在于它还会调整readline的行为,因此不需要rlwrap

运行REPL的完整命令是gradle repl --console plain --no-daemon,因此在shell中创建别名是有意义的。