我有一个像这样的 groovy 脚本:
@Grab('com.univocity:univocity-parsers:2.0.0')
import com.univocity.parsers.csv.*;
class MyCsvParser {
}
我想通过 GroovyClassLoader
在我的 java 应用程序中加载这个类。但是 @Grab
以某种方式产生了 Ivy 异常:
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 依赖项。默认情况下不添加它,因为它被声明为不可传递的。 Ivy 是管理由 @Grab
加载的依赖项的库:
<dependency>
<groupId>org.apache.ivy</groupId>
<artifactId>ivy</artifactId>
<version>2.4.0</version>
</dependency>
关于java - 在 Java 中使用 GroovyClassLoader 时获取类未找到 : org. apache.ivy.core.report.ResolveReport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829990/