“grails clean”脚本实际上做了什么?

时间:2010-12-31 04:01:33

标签: grails

我对grails clean命令感到好奇。将错误的包导入域类后,它为java.util.regex。我用它来做一个正则表达式替换命令,但事实证明一切都没有改变,所以我认为我的正则表达式是错误的。但我把它留在那里以供将来改进。

我的localhost中的web-app正常运行,但其他程序员告诉我,当他们尝试编译我的代码时,他们编译错误。我关闭grails然后再次启动它,但它仍然正常运行。只有在运行grails clean后才会出现编译错误

因此,应用程序似乎首先忽略了我的更改。在文档中,他们说:

  

如果你的Grails应用程序有   被搞砸了,想出来了   神秘的错误消息尝试:

     

grails clean

我对这个“神秘”的东西感到有点困惑。那么grails clean实际上做了什么?除非调用grails clean,否则不会再次编译哪些资源?

2 个答案:

答案 0 :(得分:17)

clean脚本删除已编译的类和属性文件以及复制到类dir的其他非源资源,以及测试报告等其他内容。

您看到的问题是增量编译。它一般来说相当可靠,但可能会因Java而失败,不幸的是Groovy很可能因为它是一种动态语言。很难在所有其他类中检测到一个类的更改的全部范围,有时会更改错过。如果你很幸运,很明显有些事情是错的,但有时可能需要一段时间才能想知道为什么会发生一些非常奇怪的行为。

所以要做的最好的事情就是完全编译,无论是纯Java还是Groovy和Java的混合。由于这很昂贵(特别是对于较大的项目),尽可能使用渐进式编译就足够了,但偶尔强制使用grails clean完全编译。

答案 1 :(得分:3)

grails clean
  

clean命令从应用程序中删除所有已编译资源。但不是临时文件。

grails clean-all
  

clean-all命令删除所有已编译资源以及工作目录,其中包含项目特定的临时文件。

由于Groovy是一种编译语言,与Java一样,这有时可用于清除类的旧实例并确保正确编译。在运行测试或创建WAR文件之前运行这些脚本以确保完整编译也是一个好主意。