Getting Class Not Found: org.apache.ivy.core.report.ResolveReport when using GroovyClassLoader in Java

Viewed 9450

I have a groovy script like so:

@Grab('com.univocity:univocity-parsers:2.0.0')
import com.univocity.parsers.csv.*;

class MyCsvParser {

}

And I want to load this class in my java application via GroovyClassLoader. But the @Grab somehow yields in an ivy exception:

SomeJavaClass {
    void someMethod() {
         String script = FileUtils.readFileToString("the groovy File");
         Class c = new GroovyClassLoader(this.getClass().getClassLoader())).parse(script);
    }
}

Stack:

Caused by: java.lang.ClassNotFoundException: org.apache.ivy.core.report.ResolveReport
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 41 more

When I comment out the @Grab everything works just fine. How can I enable the Grapes in GroovyClassLoader?

2 Answers

Add this to your gradle.build

configurations {
  ivy
}

dependencies {
  ivy "org.apache.ivy:ivy:2.4.0"
 ...
}

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