首页 > 解决方案 > 提取 groovy jar

问题描述

我有一个 jar 文件,其中包含一些类,假设我想从该 jar 文件中运行一个特定的类A.class

在运行时,我在我的代码中添加该 jar 文件并提取其内容。从提取的文件夹中。之后,我正在创建GroovyClassloader并将提取的文件夹路径添加到 groovy 类加载器的类路径中。之后,我在A.classgroovy 类加载器的帮助下加载。到此代码为止,我工作正常,但是当我尝试创建A.class当时的代码实例时,将抛出该类而不是其他依赖类的异常A.class,即,如果A.class导入B.class比创建A.class代码实例时抛出异常B找不到类。可能是因为类加载器不同。

任何人都可以建议我如何解决这个问题。

我的代码是:

new UnZip().unZipIt(<groovy/jar/path>,</unzip/dir/path>);
GroovyClassLoader gcl = new GroovyClassLoader();
gcl.addClasspath(<unzip/dir/path>);
Class<?> klass = gcl.loadClass("A");
klass.newInstance();

PS:jar 文件是 groovy 一个文件是在 java 代码中提取的。

标签: groovyclasspath

解决方案


你不需要提取罐子。只需将 jar 添加到类路径中:gcl.addClasspath(<groovy/jar/path>);

gcl下面的代码通过 url将 jar 添加到类加载器。但是,您可以通过文件路径添加它。

GroovyClassLoader gcl = new GroovyClassLoader();
gcl.addClasspath('http://central.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar');
Class<?> klass = gcl.loadClass("org.apache.commons.io.output.NullWriter");
def o = klass.newInstance();

println o.getClass()

推荐阅读