2016-02-25 3 views
8

В настоящее время интеграция Scala Gradle не предлагает функциональность REPL. Как эргономично запустить Scala REPL из Gradle с помощью соответствующего пути к классам?Scala REPL in Gradle

ответ

10

Минимальная 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 для объяснения, как направить STDIN с standardInput и есть REPL использовать правильный путь к классам с арг.

Отметим, что библиотека 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, создавая таким образом псевдоним в вашей оболочке имеет смысл.

+1

он работает, но я не могу перейти к предыдущей команде с помощью клавиши. может быть, вы знаете, как это исправить? – damluar

+0

Я не использую Gradle в это время, но, с моей головы, вы можете попробовать использовать rlwrap с '--quiet' вместо' --console plain'. –

Смежные вопросы