gpt4 book ai didi

java - OneJar 和动态类加载

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:55 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

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

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

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

关于java - OneJar 和动态类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11962387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com