43

我使用 scala sbt 控制台来测试我的方法。(命令:sbt然后控制台)但是在 eclipse 或其他外部编辑器中完成的代码更改并没有反映在 sbt 控制台中。

每次,我都必须退出控制台(使用 Crt + D)并再次使用控制台命令启动它以查看更改。

有人面临这个问题吗?有没有办法从控制台重新加载代码?

我正在使用 Ubuntu 64 位,

4

2 回答 2

35

并非没有使用 JRebel 之类的东西,主要是因为类定义可能会以某种方式中断,从而使已经加载的实例无法使用。我唯一的建议是使用~console运行控制台,这样如果进行了更改,它们将被重新编译并重新进入控制台。

此外,如果您定期运行一组命令,则 initialCommands sbt 设置将命令配置为在启动控制台后立即运行。

于 2012-10-03T07:40:45.590 回答
20

一种选择是:restart在控制台中使用 - 这将重新加载它并重播您迄今为止输入的所有命令。

要获得更好的解决方案,您可能需要阅读我关于使用 JRebel 和 Scala 进行增量开发的博文。

您应该像这样修改 sbt 启动脚本:

#!/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
 "$@"

当您从 SBT 内部启动 REPL 时,例如使用以下命令:

sbt console

对导入类的更改将自动反映,而无需执行 a:replayrestartREPL——这让人想起交互式 Lisp 编程。

于 2012-10-03T11:24:45.420 回答