Grails编译器一次又一次地运行,可能是因为语法错误

Hoà*_*ong 3 grails

我多次遇到这个问题:有时当我命令:grails run-app时,编译器只是一次又一次地运行,即使我之后没有改变.看起来像:

Running Grails application..
Server running. Browse to http://localhost:8080/LiningTest
  [groovyc] Compiling 1 source file to E:\workspace\W1\LiningTest\target\classes

  [groovyc] Compiling 2 source files to E:\workspace\W1\LiningTest\target\classe
s
   [delete] Deleting directory C:\Documents and Settings\Long\.grails\1.3.6\proj
ects\LiningTest\tomcat
Running Grails application..
Server running. Browse to http://localhost:8080/LiningTest
  [groovyc] Compiling 1 source file to E:\workspace\W1\LiningTest\target\classes

  [groovyc] Compiling 2 source files to E:\workspace\W1\LiningTest\target\classe
s
   [delete] Deleting directory C:\Documents and Settings\Long\.grails\1.3.6\proj
ects\LiningTest\tomcat
Running Grails application..
Server running. Browse to http://localhost:8080/LiningTest
  [groovyc] Compiling 1 source file to E:\workspace\W1\LiningTest\target\classes
...
Run Code Online (Sandbox Code Playgroud)

编译器在"服务器运行"时成功,但随后它会自动重新编译一些文件(我不知道哪个文件),然后重新运行,然后重新编译...

当我遇到语法错误时,我遇到过这个问题

constraint {
number(min:0.50) // the right way is "min: 0..50"
}
Run Code Online (Sandbox Code Playgroud)

问题是为什么会出现这个问题,以及如何找到问题的原因.(我想我错过了一些逗号/点,但现在很难找到,因为没有错误信息!)

更新:现在我发现问题是我在src/groovy中放置非域类时没有遵循文件夹结构规则.

Mar*_*Dow 7

要做的第一件事就是运行:

grails compile -verboseCompile 
Run Code Online (Sandbox Code Playgroud)

这至少会告诉你有问题的文件是什么.

显然,这可能发生在

  • 包名称与文件所在的目录(源根目录下)不匹配.
  • 类名与文件名不同.

看看这个:http: //www.pubbs.net/201007/grails/58100-grails-user-groovyc-causing-grails-to-loop-.html

Peter Ledbrook上周在Groovy&Grails Exchange的演讲中提到了这一点(29:20):http://skillsmatter.com/podcast/java-jee/talk-by-peter-ledbrook