我看过很多类加载器问题,但仍然无法解决原因,这里的错误。
我正在编写一个使用2个版本的jar的程序。一个是从旧存储中获取内容,另一个是在新存储中存储内容。
因为,我需要一次加载任何一个jar,我使用JarClassLoader创建一个代理来添加一个jar并加载它的类。但我面对ClassNotFoundException。
public class HbaseMigrator implements Runnable {
public void run() {
JarClassLoader jcl = new JarClassLoader();
jcl.add("hadoop-0.13.0-core-modified-1.jar");
Object obj1 = JclObjectFactory.getInstance().create(jcl, "UserMigThreadImpl", toProcessQueue,threadName, latch,DBUtil,lock);
MigThread mig = JclUtils.cast(obj1, MigThread.class, jcl);
Thread.currentThread().setContextClassLoader(jcl);
try {
Method method = MigThread.class.getMethod("callthis", new Class[]{});
method.invoke(mig, new Object[]{});
// mig.callthis();
} catch( Exception e) {
e.printStackTrace();
} catch(Error er) {
er.printStackTrace();
}
}
}
调用的方法是:
public void callthis() {
DFSUtil = new DFSAccessAPIImpl();
.........
}
这个类实例化在内部使用 hadoop 修改后的jar,它不是从我的类加载器中获取的,而是抛出ClassNotFoundException
。
我做错了什么?
这里使用的JarClassLoader是jcloader: org.xeustechnologies.jcl.JarClassLoader
答案 0 :(得分:0)
我在将插件加载到应用程序时遇到了这个问题,因此我决定尝试从路径中的所有jar加载所有.class文件。也许这个从我的应用程序剪下来的代码会帮助你。