首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定何时播放!2必须重新编译所有文件?

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

Stack Overflow用户
提问于 2013-05-10 20:42:49
回答 2查看 567关注 0票数 9

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

代码语言:javascript
复制
[info] Compiling 1 Scala source to /home/michael/code/superglot/target/scala-2.10/classes...
[success] Compiled in 1s

对比

代码语言:javascript
复制
[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

但是,在需要完全重新编译的情况下,我看不到明显的模式。如果我在模型或控制器类中添加一些空格,它可能只会编译该文件,但是对类似的文件进行同样的操作将触发重新编译。

我希望有更多的重新加载接近1s,因为目前我正等待一个完整的重新编译的频率比没有。我很乐意重构我的代码,使我正在工作的区域更快地重新加载,但我不知道我能做些什么来实现这个目标。对于一个典型的Play 2应用程序来说,频繁的重新编译是正常的,还是我的程序有什么反常之处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-11 01:16:16

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

您可以从last compile获得一些其他信息,例如是什么触发了要重新编译的其他文件。(在多模块构建中,last <project-name>/compile)您可以

如果添加不重要的空格会导致重新编译其他文件,那么它总是一个错误,通常在scalac本身中。这种错误的一个例子是西-7361 (除了编译器开发人员之外,它对任何人都不有用!)这在sbt 这里中得到了应用。为了修复这些问题,我们需要一个可重复的测试用例。(考虑到这方面经常涉及的工作,您可能会等待0.12.4或0.13.0来查看这些方法是否解决了您的问题。)

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

票数 7
EN

Stack Overflow用户

发布于 2013-05-11 11:50:05

我认为你在这方面采取了稍微错误的做法。由于无法成功地确定哪些更改将导致完全重新编译,因此该路径没有任何方向。

为了学习的目的,更好地了解编译器的内部结构也许是有帮助的,但是从生产力的角度来看,还有一个更好的选择,那就是jRebel,他多年来一直发放免费Scala许可证。

JRebel

这里,您可以在几分钟内获得免费的Scala许可证。然后继续并将其添加到sbt配置中。它必须直接进入sbt文件。

Linux/Mac

代码语言:javascript
复制
java -noverify -javaagent:/opt/zt/jrebel/jrebel.jar \
 -Xmx1024M -Xss2M -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -jar \
 `dirname $0`/sbt-launch-0.12.jar "$@"

Windows

代码语言:javascript
复制
set SCRIPT_DIR=%~dp0
java -noverify -javaagent:c:/opt/zt/jrebel/jrebel.jar \
 -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx1024M -Xss2M \
 -jar "%SCRIPT_DIR%\sbt-launch-0.12.jar" %*

在这个阶段,如果您已经做好了一切,当您重新启动SBT控制台时,您将看到jRebel代理已经启动,您将从您的更改的实时重新部署中获益。当您在IDE中使用Save时,JRebel只会重新加载,只加载您所做的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16490525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档