ClassLoader类依赖项(插件)

时间:2014-01-16 16:56:17

标签: java inheritance plugins classloader urlclassloader

我想问一下UrlClassLoaders。我写了一个主要的.jar文件,效果很好。现在我想让它能够从其中一个文件夹加载插件。我写了它,直到找到文件夹中的.jar文件,可以在里面列出他们的类(他们的名字,路径)。问题是,当我要求他找到该类(用于创建它的实例)时,他们将找不到它从我的主jar文件继承的类:

IN MAIN JAR:
-class Expansion { ... }

In a plugin jar:
-class ExpansionA extends MainJar.Expansion { ... }

因此,当我要求UrlClassLoader解析“ ExpansionA ”类时,它将在插件jar中搜索“ Expansion ”类而不是MainJar,并且插件jar中没有“ Expansion ”类,因为它从MainJar作为资源库继承...并且在 defineClass 方法时抛出NoDefFoundForClassError异常。我怎么能告诉他在MainJar上课后检查呢? (它不仅仅是一个类,但我希望插件能够继承MainJar中的任何类)。你可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

ClassLoader有一个父级,首先委派加载请求。要确保您创建的新类加载器可以访问类Expansion,您应该将新ClassLoader的父级设置为类ClassLoader的{​​{1}}:

Expansion URLClassLoader ClassLoader myLoader=new

这不仅可以确保(urls, Expansion.class.getClassLoader());类找到Expansion类,还可以保证它解析为同一个运行时类(首先询问父类)。如果插件jar包含类的副本,这很重要。