Подтвердить что ты не робот

Scala sbt console - изменения кода не отображаются в консоли sbt

Я использую консоль scala sbt для тестирования моих методов. (команды: sbt, а затем консоль). Но изменения кода, сделанные в eclipse или другом внешнем редакторе, не отражаются в консоли sbt.

Каждый раз мне нужно выйти из консоли (используя Crt + D) и снова запустить его с помощью команды console, чтобы увидеть изменения.

Кто-нибудь сталкивается с этой проблемой? Есть ли способ перезагрузить код с консоли?

Я использую 64-битный Ubuntu,

4b9b3361

Ответ 1

Не без использования чего-то вроде JRebel, главным образом потому, что определения классов могут ломаться таким образом, чтобы сделать загруженные экземпляры непригодными для использования. Единственное, что у меня есть, это запустить консоль с помощью ~ console, чтобы в случае внесения изменений они будут перекомпилированы и консоль будет повторно введена.

Также, если вы регулярно запускаете набор команд, параметр initialCommands sbt настраивает команды, которые будут запускаться сразу после запуска консоли.

Ответ 2

Один из вариантов - использовать :restart в консоли - это перезагрузит его и воспроизведет все команды, которые вы ввели до сих пор.

Для лучшего решения вам может понадобиться прочитать сообщение блога об инкрементальном развитии с помощью JRebel и Scala.

Вы должны изменить запуск sbt script следующим образом:

#!/bin/bash

java -noverify -javaagent:/home/username/path/to/jrebel/jrebel/jrebel.jar
 -Drebel.lift_plugin=true -XX:+CMSClassUnloadingEnabled
 -XX:MaxPermSize=512m -Xmx512M -Xss2M -jar `dirname $0`/sbt-launch.jar
 "[email protected]"

Когда вы запускаете REPL изнутри SBT, например, с помощью команды:

sbt console

изменения импортированных классов будут автоматически отражаться без необходимости делать :replay или restart REPL - что-то напоминающее интерактивное программирование Lisp.