我有一个jar文件,其中包含一些类,从那个jar文件我想运行一个特定的类假设A.class
。
在运行时,我在我的代码中添加jar文件并提取其内容。从提取的文件夹中。之后我创建了GroovyClassloader
并将提取的文件夹路径添加到groovy类加载器的类路径中。之后我在groovy classloader的帮助下加载A.class
。直到这个代码我工作正常,但是当我试图创建A.class
的实例时,代码抛出类不是另一个依赖类A.class
的fount异常,即如果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文件很常见,文件在java代码中被提取。
你不需要提取jar。只需将jar添加到类路径:gcl.addClasspath(<groovy/jar/path>);
下面的代码通过url将jar添加到类加载器gcl
中。但是,您可以通过filepath添加它。
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()