的新手,并且使用emacs + ensime + sbt设置进行Scala开发。
这个设置非常好,很轻巧,但有一件事让我发疯 - 无法自动编译/重新加载从 sbt 开始的 Scala 控制台中的更改。
我经常使用 REPL,并希望能够使用console
命令从 sbt 启动 REPL 并从 REPL 测试我对 scala 类的更改,而无需每次进行更改时关闭它并重新加载。
我来自 Erlang 环境,这种开发方式在 Erlang 中很容易,但在 SBT 中似乎很难。我安装了JRebel插件,但它似乎不适用于我描述的情况。
有没有人能够做类似的事情并愿意分享配置步骤?
提前非常感谢。
sbt
有两件事可能:
-
通过在命令前面加上
~
(波浪号)来自动重新编译由文件更改触发的项目源。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
属性(这就是我们想要的)。