Groovy窍门:使用ImportCustomizer透明的为脚本添加Import

从Groovy 1.8之后,可以不使用import关键字,就能轻松地为Groovy文件添加import声明。Hubert Klein Ikkink在“Groovy Goodness”中给出了具体用法

用法很简单,就是定义ImportCustomizer,使用其addImport方法为脚本添加包、类、别名等信息。之后,将配置过的ImportCustomizer添加至CompilerConfiguration对象。下面看一个具体的示例:

  • 在com.mrhaki.blog下创建了一个类和enum;
  • 创建Groovy脚本,其中会用到Post类,但是却没有为Post定义import。此时运行这个脚本,一定是会出现无法解析的错误。
  • 创建另一Groovy脚本,内容如下:
  • import org.codehaus.groovy.control.customizers.ImportCustomizer
    import org.codehaus.groovy.control.CompilerConfiguration
    
    //为脚本添加import;
    def importCustomizer = new ImportCustomizer()
    //导入静态的com.mrhaki.blog.Type.*
    importCustomizer.addStaticStars 'com.mrhaki.blog.Type'
    //导入com.mrhaki.blog.Post,并为其定义别名:Article;
    importCustomizer.addImport 'Article', 'com.mrhaki.blog.Post'
    
    def configuration = new CompilerConfiguration()
    //将配置过的ImportCustomizer添加至CompilerConfiguration对象
    configuration.addCompilationCustomizers(importCustomizer)
    
    //创建shell,执行上步创建的脚本
    def shell = new GroovyShell(configuration)
    shell.evaluate new File('sample.groovy')
    

    注意,需要将com.mrhaki.blog.Post和com.mrhaki.blog.Type编译后的类文件添加至本脚本的classpath中,如果你使用的是IDE,可以忽略这一步。

    一切就绪后,执行本脚本,错误不再!

关于示例中详细代码,请参见原文。关于更多的Groovy窍门,参见Groovy Goodness

By huwh - Posted on 02 六月 2011