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

标签 java grails groovy playframework hotdeploy

我很好奇有没有人知道 Grails 或 Play 等框架如何检测代码中的更改并自动触发重新编译而无需重新启动应用服务器的详细信息?是否有特定于 Groovy 编译器或其动态特性的东西可以很容易地发生这种情况?

作为背景,我在构建过程中有一个自定义代码生成阶段,我希望能够拥有类似的编辑和刷新功能。

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

编辑:我应该澄清一下,我并不是要构建一个 Grails 插件,而是要了解在 servlet 容器中的任何应用程序中执行此操作需要什么。即,我使用的是 Groovy 而不是 Grails。

Edit2: 听起来 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 模式下非常高效,因为您会经常更改代码,并且即时反馈非常强大。

关于java - Grails 或 Play 如何检测更改和热重载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226746/

相关文章:

grails - Grails gorm:在其他表中查找丢失的条目

groovy - 在不同的对象上调用闭包?

grails - 在 Controller 中的后续命令对象上初始化命令对象时出错

json - 如何通过groovy脚本比较soapui中的文件?

java - 第一次使用正则表达式

java - 如何使用 hibernate CRITERIA 编写此连接查询

java - 为什么添加长变量会导致串联?

java - Spock Spy/Mock 未注册调用

unit-testing - Grails 的 mockDomain() 方法有哪些限制?

flash - 执行时grails在 View 中显示Flash消息