Gradle 中的 Scala REPL

Scala REPL in Gradle

目前 Gradle 的 Scala 集成不提供 REPL 功能。如何使用适当的类路径从 Gradle 符合人体工程学地 运行 Scala REPL?

最小 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'
}

感谢 解释了如何使用 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 中创建别名很有意义。