Scala - sbt:运行时编译是否安全?

时间:2015-01-08 10:47:37

标签: scala sbt

我经常需要在scala中运行一些耗时的实验,通常我会运行第二次sbt 同一个项目的实例,我对其他实例中运行的代码进行了更改并进行编译。 我这样做的原因是,在我的代码进展之前,我不必等待长时间运行的过程。

我的问题是:这样做是否安全,或者是否有可能重新编译sbt / scala中当前运行的代码的部分会导致我的运行过程出现问题?

到目前为止我所观察到的是大部分时间都没问题,但是在运行时重构我的代码时,我确实碰到了一个没有定义错误的类。

1 个答案:

答案 0 :(得分:4)

正如@marcus所提到的,编写一个尚未被正在运行的JVM加载的.class文件的编译器有可能被加载而不匹配其他编译类。在许多情况下,你会很好,但它可能会导致问题。在这种情况下,您可以做一些事情:

  1. 在不同的目录中编译。检查你的代码到两个完全不同的目录,并进行本地提交(假设你正在使用git)从存储库的一个副本推送/拉到另一个副本。这将确保您的测试无法进行编译更改,直到您准备好(当您从开发存储库中拉出来时)。
  2. 使用像Jenkins或Travis这样的自动CI系统在每次提交时运行测试。与#1类似,这与您的开发工作不会发生冲突,因为它是代码的单独签出。
  3. 使用sbt-revolver,它使用re-start命令在单独的JVM中运行程序,并在有更改时重新启动它。但是,这会中断您的测试。
  4. 使用JRebel,它比JVM或大多数IDE更好地重新加载类。