在Java中使用GroovyClassLoader时,找不到类:org.apache.ivy.core.report.ResolveReport

我有一个像这样的groovy脚本:

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

我想通过GroovyClassLoader在我的java应用程序中加载这个类。 但@Grab以某种方式在常春藤例外产生:

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

堆:

 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 

当我评论@Grab一切正常。 如何在GroovyClassLoader启用Grapes?

你应该添加常春藤依赖。 默认情况下不会添加它,因为它被声明为非传递性的。 Ivy是管理@Grab加载的依赖项的库:

  org.apache.ivy ivy 2.4.0