【问题标题】:How to not have Gradle quit Scala's REPL immediately?如何不让 Gradle 立即退出 Scala 的 REPL?
【发布时间】:2016-02-24 22:22:59
【问题描述】:

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 立即退出?

【问题讨论】:

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


    【解决方案1】:

    您还需要将控制台输入重定向到您的 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 来进行退格和历史工作。我已经发布了another question 并将尝试在那里概述这些内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多