写 Scala 项目时,改一行逻辑就得等 sbt 编译、重启整个服务,等个十几秒,泡杯茶回来还没好——这体验谁懂?很多人以为 Scala 和 Java 一样,天生不支持热部署,其实不是。
Scala 本身不带热部署,但生态里有靠谱方案
Scala 是编译型语言,字节码得加载进 JVM 才能跑,JVM 默认不支持运行中替换类。但借助工具链,能做到「改完保存,几秒内生效」,尤其适合本地开发调试。
sbt-revolver 插件:最常用的热重载方案
在 project/plugins.sbt 里加一句:
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")然后在 build.sbt 中启用:
revolverEnable := true启动时用 sbt ~reStart(注意波浪号),只要源码一保存,插件自动编译、停旧进程、启新进程——比手动 reStart 快多了,基本感觉不到卡顿。
Play Framework 自带热重载
如果你用的是 Play(比如写后台 API 或小管理后台),根本不用额外配。运行 sbt run 后,浏览器打开 http://localhost:9000,改完控制器或模板,刷新页面就能看到效果,连进程都不用杀。连前端 HTML、Scala 模板、路由文件都支持实时更新。
IntelliJ IDEA + JRebel(付费但真香)
装上 JRebel 插件,配置好后,点一下「热交换」按钮,改完 Controller 或 Service 类,保存即生效,连 Spring Boot 或 Akka 的 Actor 类都能换。虽然要花钱,但对经常调接口、测流程的开发者来说,一天省下的重启时间够买半杯咖啡了。
不过提醒一句:热部署不是万能的。比如改了类签名(加了字段、删了方法)、换了继承关系,或者用了静态初始化块,JVM 还是会报错「class redefinition failed」,这时候老老实实重启一次更省事。
另外,生产环境千万别开热部署——安全和稳定性压倒一切,本地爽归爽,上线前该打包就打包,该验就验。