我经常不得不在 Scala 中运行一些耗时的实验,通常我会为同一个项目运行第二个 sbt 实例,在那里我对在另一个实例中运行的代码进行更改并进行编译。我这样做的原因是,在我的代码取得进展之前,我不必等待一个长时间运行的过程完成。
我的问题是:这样做是否安全,或者是否有可能在 sbt/scala 中重新编译当前正在运行的代码的一部分会导致我的运行过程出现问题?
到目前为止,我观察到的是,大多数情况下它都很好,但是在运行时重构我的代码时,我确实遇到过一次未定义的类错误。
正如@marcus 所提到的,编译器编写的 .class 文件尚未被您正在运行的 JVM 加载,因此有可能被加载并且与其他编译类不匹配。在许多情况下,你会没事的,但它可能会导致问题。在这种情况下,您可以做一些事情:
re-start命令在单独的 JVM 中运行程序,并在发生更改时重新启动它。但是,这会中断您的测试。