玩框架。 无需编译

我被介绍到Play框架,我发现它的一个惊人的事情是没有必要编译项目。 您只需保存已编辑的文件并重新加载网页即可。

我被告知Java源代码被编译为字节码然后用JIT编译器编译,那么Play框架内部的魔力是什么?

在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

虽然你没有提到Play的哪个版本用最简单的词语让你感到惊讶,但可以这样描述:在development mode播放会监视属于你的应用程序的所有文件,如果有任何变化,它会重新编译所需的部分。 因此DEV不应用于生产 – 因为它是性能的多余损失。 否则:当您在生产模式下启动应用程序时,它将避免立即重新编译,但它将获得性能。

在Play 2中运行应用程序是完成的开发模式

 play run 

要么

 play ~run 

(第一个命令在下一页命中后重新编译代码,在下一个文件更改后重新编译第二个

在生产模式下运行应用程序可以完成

 play start 

如果你在谈论Play framework 1.x,它有一个应用程序类管理器,它自动加载java源文件并将其编译成字节代码(使用Eclipse Java Compiler),另外它将使用Javassist增强编译代码。 检查https://github.com/playframework/play/tree/master/framework/src/play/classloading中的代码。