Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 525
pditommaso Avatar asked Aug 11 '13 16:08

pditommaso


2 Answers

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

like image 67
Peter Niederwieser Avatar answered Nov 07 '22 23:11

Peter Niederwieser


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)
}
like image 34
Steve Campbell Avatar answered Nov 07 '22 23:11

Steve Campbell