如何让Gradle不立即退出Scala的REPL?

3

以下是在build.gradle文件中的简单代码,它们公开了一个repl任务,理想情况下可以启动一个scala REPL,并保持运行状态。加载完成后,REPL会立即接收到:quit命令并退出。

build.gradle文件的重要部分:

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
}

启动REPL:

% gradle repl
:compileJava UP-TO-DATE
:compileScala UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:repl
Welcome to Scala version 2.11.7 (OpenJDK Server VM, Java 1.7.0_91).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :quit

BUILD SUCCESSFUL

Total time: 31.177 secs

启动REPL后会立即自动退出。如何避免REPL立即退出?

1个回答

3

您还需要将控制台输入重定向到javaexec java进程。请尝试在任务定义中添加standardInput System.in。在我的情况下,我发现还需要添加args '-userjavacp'

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

最后,使用-q选项运行gradle可以抑制gradle的进度提示,使我得到一个更干净的scala repl。


谢谢,那个方法可行。就像你所说的,如果没有-q选项,gradle的提示会干扰REPL的提示。然而,我发现--console plain选项更适合:它像-q一样解放了repl,并使readline表现更好。如果没有--console plain,我必须使用rlwrap才能使退格和历史记录正常工作。我已经发布了另一个问题,并将在那里尝试概述这些事情。 - Dominykas Mostauskis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接