gradlegroovygroovy-grape

Error compiling a Groovy project using @Grab annotation


I'm compiling a Groovy project with Gradle, but I've noticed that when I use the @Grab annotation in my code, I get the following error:

$ 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 here http://pastebin.com/0ty4jNct)

I've found out that the only way to get it working is to add the 'groovy' and 'ivy' module to the groovy classpath, but I would like to avoid this, since the groovy classpath is deprecated.

Is this a Gradle bug? or there's a better way to manage the @Grab dependency?


Solution

  • @Grab is meant to be used for standalone scripts that aren't precompiled, and you wouldn't normally use it together with compiled code. If you do, you may have to add Ivy to groovyClasspath. Something like:

    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
    }
    

    That said, a better approach is to manage dependencies with Gradle.