提取普通罐

时间:2018-12-27 04:39:49

标签: groovy classpath

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

在运行时,我正在代码中添加该jar文件并提取其内容。从解压缩的文件夹中。之后,我创建GroovyClassloader并将提取的文件夹路径添加到groovy classloader的classpath中。之后,我借助groovy类加载器加载A.class。直到这段代码,我都可以正常工作,但是当我尝试创建A.class的实例时,代码抛出该类不是A.class的其他从属类的异常源,即{{1与创建A.class代码实例时相比,}}导入B.class引发了A.class类的异常。可能是因为类加载器不同。

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

我的代码是:

B

PS:jar文件很普通,文件用Java代码扩展。

1 个答案:

答案 0 :(得分:0)

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

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

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()