【问题标题】:Loading external Classes with external dependencies - URLClassLoader ClassNotFoundException加载具有外部依赖项的外部类 - URLClassLoader ClassNotFoundException
【发布时间】:2017-06-30 16:04:17
【问题描述】:

我正在从 external.JAR 文件并通过 URLClassLoader 加载一个类,只要外部类不引用另一个 JAR,它就可以工作。如果我这样做会产生 ClassNotFoundException。

作为一种解决方法,我将另一个第二层 JAR 作为依赖项添加,但我想在运行时也动态加载它们。

问题:如何加载引用其他外部类的外部类?或者我如何加载外部 JAR 文件和类,在 正确的顺序,所以我没有遇到异常?

我是否应该捕获异常,然后“首先”加载尚未加载的类?

【问题讨论】:

    标签: java jar urlclassloader


    【解决方案1】:

    您实际上可以使用子类加载器来加载它们。该主 jar 及其所有依赖项将是该类加载器的一部分,并且可以在需要时被引用和丢弃。

    主类加载器 -> ChildFirstClassLoader -> 加载 jar 和依赖 jar

    This is a good example

    Here is another SO similar reference

    半例子

    File file = new File("c:\\free-universe-games-llc\\app.jar");
    URL url = file.toURI().toURL();
    ChildFirstClassLoader urlClassLoader = new ChildFirstClassLoader(new URL[]{url}, SomeClassLoader.class.getClassLoader()); 
    Class<?> aClass = urlClassLoader.loadClass("com.freeuniversegames.app.App.class");
    Object o = aClass.newInstance();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2018-05-05
      • 2014-11-26
      相关资源
      最近更新 更多