我被介绍到Play框架,我发现的一件令人惊奇的事情就是没有必要编译项目。您只需要保存已编辑的文件并重新加载网页。
我被告知Java源代码被编译为字节码,然后使用JIT编译器进行编译,那么Play框架内部的魔力是什么?
答案 0 :(得分:11)
在DEV模式下运行时,Play的工作方式是检查java文件的上次修改日期,并使用在运行时生成的.class文件交叉引用它们。如果它识别出某些内容已经发生变化,那么它会在运行时重新编译它们。
在Play 1.x中 - 使用eclipse jdt编译器(org.eclipse.jdt.internal.compiler.Compiler)完成重新编译。如果您想查看Play 1.x中的代码,请查看以下课程 - https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java
在Play 2.x中,看起来Play通过与SBT工具链接来实现它。看看这个 - https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/core/system/ApplicationProvider.scala
答案 1 :(得分:4)
虽然你没有提到哪个版本的Play在最简单的单词中让你感到惊讶,但可以这样描述:在development mode
中播放所有属于你的应用程序的文件,如果有任何变化,重新编译所需的部分。因此DEV不应用于生产 - 因为它是性能的多余损失。否则:当您在生产模式下启动应用程序时,它将避免立即重新编译,但它将获得性能。
在Play 2中运行应用程序是使用
完成的开发模式play run
或
play ~run
(第一个命令在下一页命中后重新编译代码,在下一个文件更改后重新编译第二个)
可以使用
在生产模式下运行应用程序play start
答案 2 :(得分:1)
如果你在谈论Play framework 1.x,它有一个应用程序类管理器,它自动加载java源文件并将其编译成字节代码(使用Eclipse Java Compiler),另外它将增强使用的编译代码Javassist进行。检查https://github.com/playframework/play/tree/master/framework/src/play/classloading中的代码。