2012-08-14 59 views
7

我们目前正在研究在我们的应用程序中使用OneJar(出于多种原因),但是我们的应用程序使用一些定制的URLClassloader来加载应用程序扩展。OneJar和动态类加载

当捆绑为“OneJar”罐子时,我们得到ClassNotFound例外。有问题的类驻留在捆绑的Jar中,我们只是依靠类加载器机制来解决父/子关系。

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

有没有人有过这方面的经验或阐明我们如何去解决它。

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

+0

你知道,如果你有爱的人的勇气,谁下来投票没有至少具有正派留下来评论整流这究竟是为什么他们觉得有必要这样做。它不会帮助任何人。没有某种解释,很难知道如何改进未来的问题/答案 – MadProgrammer 2013-12-11 19:28:21

回答

6

我发现我是在制造关于我们的类加载器是如何创建的一些假设。

我认为,随着它的父类加载器会使用它的类加载器(即的getClass()。getClassLoader()),但相反,它用的是SystemClassLoader不是

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

我加入CustomClassLoader.class.getClassLoader()到我们自定义的类装载器的构造

+0

你能接受你自己的答案吗? – fglez 2013-03-06 09:59:28

+0

@fglez是否认为这是“完成”的事情,但如果它有帮助... – MadProgrammer 2013-03-06 10:03:05