2011-10-29 17 views
4

グルーヴィーdefualt輸入デフォルトの輸入グルーヴィー

デフォルトの輸入に私たち自身のパッケージを作成することが可能ですか?グルーヴィーなランタイムがデフォルトのインポートと私自身のパッケージを使用すると言うする方法はあります.is?。

答えて

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

どのように私はこれを使用することができますが、私はその後DefaultImportClassLoaderを使用して、このグルーヴィーファイルと別のjarファイルが作成されますか? – anish

0

ImportCustomizerともっと簡単な方法があるのGroovy 1.8ので:

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