OneJar和动态类加载

时间:2012-08-14 23:40:42

标签: java urlclassloader dynamic-class-loaders onejar

我们目前正在研究在我们的应用程序中使用OneJar(由于多种原因),但我们的应用程序使用了许多自定义URLClassloader来加载应用程序扩展。

当捆绑为“OneJar”Jar时,我们会获得ClassNotFound个例外。有问题的类存在于捆绑的Jar中,我们只是依靠类加载器机制来解析父/子关系。

就是这样。我们有一个共同的interface,它存储在捆绑的Jar中(应该在父类的类加载器上下文中)。扩展实现了这个interface(允许我们调用扩展)并依赖于子类加载器使用父类加载器的资源查找功能的能力。

是否有任何人对此有任何经验或对我们如何解决它有任何启示。

我对其他类似的机制感兴趣(将我们的库Jar捆绑到一个Jar资源中,不需要用来解开所有东西,将Jar放到一个文件中)

1 个答案:

答案 0 :(得分:7)

我发现我对如何创建类加载器做了一些假设。

我认为类加载器会使用它的类加载器作为它的父级(即getClass()。getClassLoader())但它不是

相反,它使用的是SystemClassLoader。这意味着当子类加载器寻找共享接口时,它找不到它(因为它正在查看SystemClassLoader而不是OneJar类加载器。)

我通过将CustomClassLoader.class.getClassLoader()添加到我们的自定义类加载器

的构造函数中来纠正这个问题