我正在从external.JAR文件加载一个类,并通过URLClassLoader加载,只要外部类不引用另一个JAR,它就可以工作。如果我这样做会产生ClassNotFoundException。
作为一种解决方法,我将其他第二层JAR添加为依赖项,但我想在运行时动态加载它们。
问题:如何加载引用其他外部类的外部类?或者如何加载外部JAR文件和类 正确的顺序,所以我没有得到例外?
我应该抓住异常,然后"首先"加载那个尚未加载的类?
答案 0 :(得分:0)
您实际上可以使用子第一类加载器加载它们。该主jar及其所有依赖项将是该类加载器的一部分,如果需要可以引用并丢弃。
主类装载机 - > ChildFirstClassLoader - >装载罐子和从属罐子
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();