Grails或Play如何检测更改和热重载类?

我很好奇是否有人知道Grails或Play等框架如何检测代码中的更改并在不重新启动应用服务器的情况下自动触发重新编译? Groovy的编译器或其动态特性是否有特定的东西可以轻松实现?

对于后台,我在构建过程中有一个自定义代码生成阶段,我希望能够具有类似的编辑和刷新function。

提前感谢任何指针,即使我必须筛选代码以获得更大的图片。

编辑:我应该澄清一点,我不打算构建一个Grails插件,以便了解在servlet容器中的任何应用程序中执行此操作所需的内容。 即,我使用的是Groovy而不是Grails。

编辑2:听起来Play有一个特定的DEV模式,可以进行热重新加载: http : //www.playframework.org/documentation/1.1.1/main#lifecycle

我知道JRebel通过类加载器执行精细的类版本控制,但我假设像Grails或Play这样的Web框架没有将它带到那个级别。

Play使用Eclipse JDT在运行时编译代码。

请查看以下类,Play使用该类在运行时执行必要的编译。

https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java

另外,请注意Play中DEV模式和PROD模式之间的区别。 这是由Play开发人员做出的设计决定,一旦应用程序进入生产模式,这些类在服务器启动时进行编译,并且不会检查热重新加载。 这是有道理的,因为在PROD模式下,您的代码不应该真正改变。

在DEV模式下,每次收到新请求时都会检查Java文件的更新,并自动重新编译任何已更改的文件(并且错误会直接显示在浏览器中)。 这个过程在DEV模式下非常高效,因为您将经常更改代码,并且即时反馈非常强大。