默认导入groovy

时间:2011-10-29 06:58:01

标签: groovy

  

groovy defualt进口

是否可以在默认导入中拥有自己的包?有没有办法告诉groovy运行时使用我自己的包作为默认导入?

2 个答案:

答案 0 :(得分:4)

JIRA涵盖了您的问题。

大部分都在这里。

 class DefaultImportSourceUnitOperation extends SourceUnitOperation {
     public void call(SourceUnit source) throws CompilationFailedException {
         source.getAST().addImportPackage("pkg1.pgk2.pkg3.");
     } 
}

 class DefaultImportClassLoader extends GroovyClassLoader {
     protected CompilationUnit createCompilationUnit(CompilerConfiguration config, CodeSource
 codeSource) {
         CompilationUnit cu = super.createCompilationUnit(config, codeSource)

         cu.addPhaseOperation(new DefaultImportSourceUnitOperation(), Phases.CONVERSION)

         return cu
     }
}

请务必不要忘记将.添加到包声明的末尾。

古德勒克!

答案 1 :(得分:0)

从Groovy 1.8开始,使用ImportCustomizer的方法更简单:

def importCustomizer = new ImportCustomizer()
importCustomizer.addImports('com.looneytunes.Coyote', 'com.looneytunes.RoadRunner')
importCustomizer.addStarImports('com.acme')
importCustomizer.addStaticStars('com.looneytunes.Physics')
def configuration = new CompilerConfiguration()
configuration.addCompilationCustomizers(importCustomizer)
def shell = new GroovyShell(configuration)
shell.evaluate """
    new Coyote().startPlanToCatch(new RoadRunner())  // no need for explicit imports
        .useContraption(new PortableHole())          // from com.acme
        .withPhysicsViolation({ forgetGravity(it) }) // method from com.looneytunes.Physics
        .start()
"""