2013-08-11 8 views
15

Sto compilando un progetto Groovy con Gradle, ma ho notato che quando uso l'annotazione @Grab nel mio codice, ottengo il seguente errore:Errore durante la compilazione di un progetto Groovy utilizzando annotazione @Grab

 
$ gradle compile 
:buildInfo 
:compileJava UP-TO-DATE 
:compileGroovy FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':compileGroovy'. 
> org/apache/ivy/core/report/ResolveReport 

(full stack trace qui http://pastebin.com/0ty4jNct)

ho scoperto che l'unico modo per farlo funzionare è quello di aggiungere il modulo 'groove' e 'edera' al Groovy classpath, ma vorrei evitare questo, dal momento che il classpath groovy è deprecato.

È un errore Gradle? o c'è un modo migliore per gestire la dipendenza da @Grab?

risposta

23

@Grab è pensato per essere utilizzato per script autonomi che non sono precompilati e normalmente non lo si utilizzerà insieme al codice compilato. Se lo fai, potresti dover aggiungere Ivy a groovyClasspath. Qualcosa di simile:

repositories { 
    mavenCentral() 
} 

configurations { 
    ivy 
} 

dependencies { 
    ivy "org.apache.ivy:ivy:2.3.0" 
    compile "org.codehaus.groovy:groovy-all:2.1.5" 
} 

tasks.withType(GroovyCompile) { 
    groovyClasspath += configurations.ivy 
} 

Detto questo, un approccio migliore è gestire le dipendenze con Gradle.

+0

Ciao, vuoi dire: 'configurationations {ivy}' e usarlo nel blocco 'dependencies', ma restituisce' Impossibile dedurre il percorso della classe Groovy perché non è stato trovato alcun Groovy Jar sul percorso della classe: configuration ': compile'' – pditommaso

+0

Right. E ovviamente dovrai dichiarare una dipendenza Groovy. –

+1

E 'possibile avere uno "script" Groovy che può essere eseguito sia in modalità standalone (con '@ Grab') che in contesto Maven? – MarkHu

0

La soluzione accettata ha funzionato per me in fase di compilazione, ma avevo ancora problemi simili in fase di runtime. Di seguito ha lavorato per me, escludendo il codice di uva dalla compilazione del tutto:

compileGroovy { 
    groovyOptions.configurationScript = file("gradle/config.groovy") 
} 

... dove gradle/config.groovy è un file separato, il contenuto dei quali erano:

withConfig(configuration) { 
    configuration.setDisabledGlobalASTTransformations(['groovy.grape.GrabAnnotationTransformation'] as Set) 
} 
Problemi correlati