【问题标题】:OneJar and dynamic class loadingOneJar 和动态类加载
【发布时间】:2012-08-11 08:09:42
【问题描述】:

我们目前正在调查在我们的应用程序中使用 OneJar(出于多种原因),但我们的应用程序使用了一些自定义 URLClassloaders 来加载应用程序扩展。

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

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

有没有人对此有任何经验或阐明我们如何解决它。

我对其他类似机制感兴趣(用于将我们的库 Jar 捆绑到单个 Jar 资源中,不需要使用将所有内容和 Jar 解压缩到单个文件中)

【问题讨论】:

  • 你知道,如果你不得不爱那些投反对票的人的勇气,至少没有礼貌地发表评论,说明他们为什么认为有必要这样做。它对任何人都没有帮助。没有一些善意的解释,很难知道将来如何改进问题/答案

标签: java urlclassloader dynamic-class-loaders onejar


【解决方案1】:

我发现我对我们的类加载器的创建方式做了一些假设。

我假设类加载器会使用它的类加载器作为它的父类(即 getClass().getClassLoader()),但事实并非如此

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2011-04-04
    • 2014-09-27
    • 2021-02-08
    • 2012-10-10
    相关资源
    最近更新 更多