java - 在 Java 中使用 GroovyClassLoader 时获取类未找到 : org. apache.ivy.core.report.ResolveReport

标签 java groovy

我有一个像这样的 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/

相关文章:

java - JodaTime:无法解析符号 "convert"

Java 多线程服务器 *有时* 在 ServerSocket.accept() 方法中抛出 SocketException(套接字关闭)

hibernate - Grails/hibernate 标准ID inList

groovy - 如何在Gradle构建项目中创建几个ejb jar?

groovy - 应用gradle插件有什么区别

java - 由于 java.rmi.server.ExportException : internal error: ObjID already in use,Red5 服务器无法启动

java - 有没有一种简单的方法来输出按列的 CSV?

unit-testing - 使用 Groovy 模拟 Jenkins 管道

java - ElasticSearch 2.2.0 - ESIntegTestCase - 在搜索中执行 groovy 脚本时出现 ClassNotFoundException

Java system.getProperty ("user.dir")在 ubuntu 中给出错误结果