【问题标题】:URLClassLOader unable to load classes from jar dynamicallyURLClassLOader 无法从 jar 动态加载类
【发布时间】:2014-11-01 07:33:43
【问题描述】:
   URLClassLoader child;
   try {
       child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
       child.loadClass("com.bla.bla.StringUtilService");
   } catch (MalformedURLException | ClassNotFoundException ex) {
       ex.printStackTrace();
   }

我在loadClass 中收到ClassNotFoundException

我已经尝试了几种代码变体,例如

URL[] urls = { new URL("jar:file:" + "E:\\Works\\Workspace\\JUnit_Proj\\client.jar"+"!/") };
URLClassLoader cl = URLClassLoader.newInstance(urls);

但所有结果都变成ClassNotFoundException

我尝试在 Eclipse 中调试,但类加载器实例无法从 jar 加载类。类 Vector 为空。

【问题讨论】:

  • myJar的类型是什么?
  • @Henry:java.io.File。也尝试使用 JarFile。

标签: java urlclassloader dynamic-class-loaders


【解决方案1】:

使用不同的 URLClassLoader 构造函数成功。

try { File jarFile = new File("D:\\Workspace\\Test\\Test.jar"); URLClassLoader loader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}); Class.forName("com.bla.bla.HelloWorld", true, loader); System.out.println("Success"); loader.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

【讨论】:

    【解决方案2】:

    该类是 url 中 dir 的直接子级,因此您不需要包。

    不带包装试试这个。像这样:

    URLClassLoader child;
    try {
        child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, Test2.class.getClassLoader());
        child.loadClass("StringUtilService");
    } catch (MalformedURLException | ClassNotFoundException ex) {
        ex.printStackTrace();
    }
    

    另外,试试这样:

    URLClassLoader child;
    try {
        child = new URLClassLoader(new URL[]{myJar.toURI().toURL()}, getClass().class.getClassLoader());
        child.loadClass("StringUtilService");
    } catch (MalformedURLException | ClassNotFoundException ex) {
        ex.printStackTrace();
    }
    

    解决方案来自: ClassNotFoundException while loading a class from file with URLClassLoader

    【讨论】:

    猜你喜欢
    • 2011-06-07
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多