Error compiling a Groovy project using @Grab annotation

10.8k views Asked by At

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?

2

There are 2 answers

3
Peter Niederwieser On BEST ANSWER

@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.

1
Steve Campbell On

The accepted solution worked for me at compile-time, but I still had similar issues at runtime. The following worked for me by excluding the grape code from the compile altogether:

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

... where gradle/config.groovy is a separate file, contents of which were:

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