如何确定播放时间!2必须重新编译所有文件?

maa*_*kle 9 scala sbt playframework-2.0

当我在Play 2应用程序中编辑scala文件时,有时只会重新编译几个文件,但通常必须重新编译整个代码库:

[info] Compiling 1 Scala source to /home/michael/code/superglot/target/scala-2.10/classes...
[success] Compiled in 1s
Run Code Online (Sandbox Code Playgroud)

[info] Compiling 2 Scala sources to /home/michael/code/superglot/target/scala-2.10/classes...
[info] Compiling 52 Scala sources and 1 Java source to /home/michael/code/superglot/target/scala-2.10/classes...
[success] Compiled in 13s
Run Code Online (Sandbox Code Playgroud)

但是,当完全重新编译是必要的时候,我看不出任何可辨别的模式.如果我将一些空白添加到模型或控制器类,它可能只编译该文件,但对可比文件执行相同操作将触发重新编译.

喜欢有许多我的重载的接近1秒,因为我目前往往不是等待完全重新编译.我很乐意重构我的代码,使我正在努力的区域更快地重新加载,但我不知道我甚至可以做些什么来实现这一点.对于典型的Play 2应用程序,频繁重新编译是否正常,或者是否有一些与我相关的异常?

Mar*_*rah 7

通常,如果更改文件的"源API",则会重新编译该文件的依赖项.源API由非私有方法和类型的签名组成.因此,如果您拥有一切所依赖的文件,则对该文件中的签名进行更改可能会导致大量重新编译.此外,当祖先的API发生变化时,必须重新编译所有后代.

您可以从中获取一些其他信息last compile,例如触发其他文件重新编译的内容.(在多模块构建中,last <project-name>/compile)您可以

如果添加无关紧要的空格导致其他文件被重新编译,那么它总是一个bug,通常在scalac本身.这种错误的一个例子是SI-7361(不是它对编译器开发人员以外的任何人都有用!)在sbt中解决了这个问题.为了解决这些问题,我们需要一个可重复的测试用例.(考虑到经常涉及的工作,你可能会等待0.12.4或0.13.0,看看那些能解决你的问题.)

0.13.0有一些改进,希望减少API更改时失效的内容.