如何自动将已更改的scala类重新加载到SBT REPL中

Rom*_*kov 12 emacs scala sbt ensime jrebel

我是Scala的新手,并使用emacs + ensime + sbt设置进行Scala开发.

这个设置非常好用,但是有一件事让我疯狂 - 无法自动编译/重新加载到sbt的Scala控制台.

我使用REPL很多,并希望能够从console命令启动REPL并使用REPL 测试我对scala类的更改,而不必关闭它并在每次进行更改时重新加载.

我来自Erlang环境,这种开发方式很容易使用Erlang但是SBT似乎很难.我安装了JRebel插件,但它似乎对我描述的情况不起作用.

有没有人能够做出类似的工作,并愿意分享配置步骤?

非常感谢提前.

Raj*_*ish 5

有两件事可能sbt

  1. 通过在命令前加上~(波浪号) 来导致由文件更改触发的项目源的自动重新编译。的console,或者console-quick,或者console-project命令可以前缀,太多,但你必须退出REPL,使重新编译发生(只需点击Ctrl+D并等待。)

  2. 触发控制台后立即自动执行 REPL 命令。它们可以定义为属性(例如 in build.sbt):

    initialCommands in console := """
    import some.library._
    def someFun = println("Hello")
    """
    
    Run Code Online (Sandbox Code Playgroud)

    没有必要单独定义属性,consoleQuick因为它默认为 中定义的属性console,但如果您想使用该console-project命令,则必须单独定义它。

最后一点:记住在*.sbt文件中的每个属性之间留空行。它们是正确解析属性所必需的。在上面的例子中,中间没有空行,所以这意味着一切都进入了initialCommands属性(这就是我们想要的。)