导入类以在grails脚本_Events.groovy中使用

导入类以在grails脚本_Events.groovy中使用,grails,groovy,grails-2.0,Grails,Groovy,Grails 2.0,在Grails2.3.7中,我使用\u Events.groovy连接到WAR打包中,以执行一些特殊处理: _Events.groovy 在构建WAR时,Grails抱怨XmlUtilimport语句\u事件。groovy不是一个类,因此导入语句不起作用。如果无法导入自定义类,如何在脚本中使用它?如何执行日志记录而不是使用println 更新 基于手动加载类,似乎做到了这一点,由于下面的答案,日志也可以正常工作: eventCreateWarStart = { name, stageDir -

在Grails
2.3.7
中,我使用
\u Events.groovy
连接到WAR打包中,以执行一些特殊处理:

_Events.groovy 在构建WAR时,Grails抱怨
XmlUtil
import语句<代码>\u事件。groovy不是一个类,因此导入语句不起作用。如果无法导入自定义类,如何在脚本中使用它?如何执行日志记录而不是使用
println

更新 基于手动加载类,似乎做到了这一点,由于下面的答案,日志也可以正常工作:

 eventCreateWarStart = { name, stageDir ->

   def xmlUtil = loadRequiredClass('demo.utils.XmlUtil')
   xmlUtil.doSomething()
   ...
   grailsConsole.log('done!')
 }

 loadRequiredClass = {classname ->
   classLoader.loadClass(classname)
 }
问题
  • Grails脚本可以使用哪些隐式对象

这是一种痛苦,但当你思考它时,它确实是有意义的。
\u Events.groovy
是构建过程的一部分,它还负责编译您试图在
\u Events.groovy
中使用的类。这绝对是一个第二十二条军规的场景,但如果不将
\u Events.groovy
拆分为单独的文件,在构建过程的不同阶段编译和加载,我看不出如何才能让它变得更好


您可以使用
grailsconnel.log(“hi”)
grailsconnel.updateStatus(“hi”)
将输出记录到控制台。

hi,thx,
println
grailsconnel.log()
之间有什么区别吗?使用grailsconnel可以保证输出看起来与其他grails输出相同。我不确定确切的区别,它可能因平台而异,取决于您是否使用--plain输出标志。()谢谢你的帮助,顺便说一句,我在哪里可以找到脚本可用的所有隐式对象
GrailConsole
classLoader
,等等?最简单的方法就是从
\u Events.groovy
内部运行
binding.variables.each{println it.key}
。我记不起到底使用了哪个绑定类(可能是BuildSettings.groovy,但我不是100%确定)。在2.3版本中,很多构建内容都发生了变化,我还没有机会完全跟上。
 eventCreateWarStart = { name, stageDir ->

   def xmlUtil = loadRequiredClass('demo.utils.XmlUtil')
   xmlUtil.doSomething()
   ...
   grailsConsole.log('done!')
 }

 loadRequiredClass = {classname ->
   classLoader.loadClass(classname)
 }