JarClassLoader - 动态加载jar - 如何?

时间:2015-07-21 07:14:36

标签: java classloader

我看过很多类加载器问题,但仍然无法解决原因,这里的错误。

我正在编写一个使用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

1 个答案:

答案 0 :(得分:0)

我在将插件加载到应用程序时遇到了这个问题,因此我决定尝试从路径中的所有jar加载所有.class文件。也许这个从我的应用程序剪下来的代码会帮助你。

https://bitbucket.org/rsohlich/plagdetector/src/432b52f252ff7647221b7e91b08731bd9cbe2a70/PlagDetectorSpring/src/main/java/cz/sohlich/app/service/impl/PluginHolderImpl.java