加载具有外部依赖项的外部类 - URLClassLoader ClassNotFoundException

时间:2017-06-30 16:04:17

标签: java jar urlclassloader

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

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

  

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

我应该抓住异常,然后"首先"加载那个尚未加载的类?

1 个答案:

答案 0 :(得分:0)

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

主类装载机 - > ChildFirstClassLoader - >装载罐子和从属罐子

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();