Как автоматически перезагрузить измененные классы scala в SBT REPL

Я новичок в Scala и использовании emacs + ensime + sbt setup для моей разработки Scala.

Эта настройка довольно приятная и легкая, но есть одна вещь, которая сводит меня с ума - неспособность автоматически компилировать/перезагружать изменения в консоль Scala, запущенную с sbt.

Я много использую REPL и хочу, чтобы я мог запустить REPL из sbt с помощью команды console и проверить мои изменения на классы Scala из REPL, не закрывая их и не перезагружая каждый раз, когда я делаю изменения.

Я исхожу из среды Erlang, и этот способ развития прост с Erlang, но с SBT, похоже, сложно. У меня установлен плагин JRebel, но он, похоже, не работает для описанной ситуации.

Кто-нибудь мог сделать что-то подобное и хотел бы поделиться шагами настройки?

Мы очень ценим заранее.

Ответ 1

В sbt возможны две возможности:

  • Причиной автоматической перекомпиляции источников проекта, вызванных изменением файла, путем префикса команды с помощью ~ (tilde). Команды console или console-quick или console-project также могут иметь префикс, но вы должны выйти из REPL, чтобы произошла перекомпиляция (просто нажмите Ctrl+D и подождите.)

  • Причинение автоматического выполнения команд REPL сразу после запуска консоли. Их можно определить как свойства (например, в build.sbt):

    initialCommands in console := """
    import some.library._
    def someFun = println("Hello")
    """
    

    Не нужно определять свойство отдельно в consoleQuick, потому что оно по умолчанию соответствует значению, указанному в console, но если вы хотите использовать команду console-project, вы должны определить ее отдельно.

В последнем примечании: не забудьте оставить пустую строку между каждым свойством в файле *.sbt. Они необходимы для правильного анализа свойств. В приведенном выше примере между пробелами нет пустых строк, поэтому это означает, что все идет в свойство initialCommands (и это то, что мы хотим.)