2011-10-29 39 views
4

常規defualt進口默認進口常規

是有可能使我們自己的包在默認情況下進口?。是有什麼辦法可以說常規運行時使用自己的包作爲默認的導入?

回答

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 
    } 
} 

請務必不要忘記將.添加到包聲明的末尾。

Goodluck!

+0

我怎樣才能利用這一點,我將創建這個groovy文件中,然後使用DefaultImportClassLoader一個單獨的jar? – anish

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() 
"""