Grails 2.1.0不自动重新加载/自动重新编译

时间:2012-08-24 21:39:26

标签: java grails

似乎Grails会自动重新编译我的GSP页面,但不会重新编译我的控制器。它曾用于以前版本的Grails。知道我能找到什么吗?

在OSX Snow Leopard上使用Grails 2.1.0。

注意:这类似于this issue

4 个答案:

答案 0 :(得分:7)

免责声明:在我的Mac上,自动重新加载一直对我有效。

我发现了一些可能有用的东西。

首先,运行自定义环境(不是开发人员)似乎会禁用自动重新加载(see this stackoverflow post),因此如果您正在运行该应用程序,则需要按照该帖子中的说明进行操作那样。

其次,如果您将应用程序作为战争运行,请确保自动重新加载已关闭。 (See the Grails Auto-Reload Page

第三,我发现使用Grails IDE(例如IntelliJ或SpringSource)确实为Grails开发环境增加了很多稳定性。例如,IntelliJ不使用二进制下载附带的Grails shell文件。它手动调用Grails jar和bootstraps。

我的问题是:

您的其他环境是什么样的?你是如何运行你的应用程序(运行应用程序或其他容器)?

您安装了哪些Grails插件(Grails文档说明tomcat插件是否配置为最佳自动重新加载)?

您的计算机上是否下载了任何其他Grails二进制文件(在尝试加载时可能会造成混淆)?

最后,您是否能够在干净的环境中重现此问题(意味着新的Grails二进制文件,新的Grails create-app)?

我还建议阅读Grails文档的部署部分(found here)。它有一些关于重装的相关信息。

我为这个长篇大论且可能没有回答的答案道歉,但我希望这引发了一两个想法。让我知道事情的结果!

答案 1 :(得分:4)

如果您错误地命名控制器上的软件包名称(因为文件夹结构与软件包声明不一致),应用程序仍将运行并且不会报告错误,但自动重新加载将不起作用。

答案 2 :(得分:0)

当我有一个BaseController类,从中派生出其他控制器时,我遇到了这个问题。如果我对BaseController类进行更改,例如添加方法或闭包,更改方法名称,导入某些类等,Grails中的整个类重新加载功能将停止。

对我有用的唯一解决方案是删除编译所有类的目标目录。至少这样我每次都不必重新启动服务器,这使我不必等待大约30秒才能显示起始页面。当类重新加载功能无法按预期工作时,这可能会非常烦人。

Grails自动重新加载功能并非没有怪癖。其中一些怪癖最终与java有关,以及类加载如何在servlet容器环境中运行。我希望Grails团队能够优先为Grails提供无缝的类重新加载,就像其他脚本环境(ruby,PHP,python或play框架)一样,因为这个框架的其他方面很乐意处理。

答案 3 :(得分:-1)

奇怪,我从来没有遇到过这个问题。你确定你的控制器编译正确,没有拼写错误吗?我发现通常只需要一两秒就可以看到控制器中反映的变化。域对象更改需要重新启动(它们通常会擦除您保存的数据),并且我发现有时对Spring管理资源(如注入服务)的更改不要采取。但控制器和GSP页面在97%的时间内重新编译:)

我介于GGTS(eclipse)和命令行run-app之间,它几乎总能为我工作。您是否正在进行任何类型的缓存?我在Lion上运行JDK 1.6,grails 2.1.1

通常,您会看到输出告诉您文件已在一两秒内重新编译保存。

相关问题