OneJar和动态类加载

Mad*_*mer 8 java urlclassloader dynamic-class-loaders onejar

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

当捆绑为"OneJar"Jar时,我们会遇到ClassNotFound异常.有问题的类存在于捆绑的Jar中,我们只是依靠类加载器机制来解析父/子关系.

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

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

我很想在其它类似机制(捆绑我们的库JAR的到一个JAR资源,不需要使用一切,罐其unjar成一个单一的文件)

Mad*_*mer 7

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

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

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

我通过添加CustomClassLoader.class.getClassLoader()到自定义类加载器的构造函数来纠正这个问题