【问题标题】:how to auto-reload changed scala classes into SBT REPL如何将更改的 scala 类自动重新加载到 SBT REPL
【发布时间】:2013-11-22 12:43:31
【问题描述】:

我是 Scala 新手,并且不熟悉使用 emacs + ensime + sbt 设置进行 Scala 开发。

这个设置非常漂亮和轻巧,但有一件事让我抓狂 - 无法从 sbt 开始将更改自动编译/重新加载到 Scala 控制台中。

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

我来自 Erlang 环境,这种开发方式在 Erlang 中很容易,但在 SBT 中似乎很困难。我安装了 JRebel 插件,但它似乎不适用于我描述的情况。

有没有人做过类似的工作并且愿意分享配置步骤?

提前非常感谢。

【问题讨论】:

    标签: scala emacs sbt jrebel ensime


    【解决方案1】:

    sbt 有两种可能:

    1. 通过在命令前加上 ~(波浪号)来自动重新编译由文件更改触发的项目源。 consoleconsole-quickconsole-project 命令也可以加前缀,但您必须退出 REPL 才能进行重新编译(只需点击 Ctrl+D 并等待。)

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

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

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

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

    【讨论】:

    • 感谢 Rajish 的回复 - 这不是我想要的。如果需要在每次更改后退出/打开 REPL 以重新加载更改,这仅意味着交互式 Scala 开发(至少在 LISP 或 Erlang 开发人员所理解的意义上)是不可能的。
    • 恐怕目前没有其他可能。 ensime github repo github.com/aemoncannon/ensime/issues/149 中存在问题,但三年以来没有发生任何事情,所以'欢迎请求请求';)
    • 如果您需要良好的实时更新 REPL 体验,也许您应该尝试 Scala-IDE 工作表github.com/scala-ide/scala-worksheet/wiki/Getting-Started
    猜你喜欢
    • 2011-01-29
    • 2012-01-22
    • 2013-03-17
    • 1970-01-01
    • 2016-06-23
    • 2021-09-08
    • 2013-10-06
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多