gpt4 book ai didi

java - 使用 jax-rs 客户端解决 osgi 类加载问题

转载 作者:行者123 更新时间:2023-12-02 10:17:14 25 4
gpt4 key购买 nike

假设您有一个模块 A,它提供了一个由模块 B 使用的静态方法。此方法使用 jax-rs 客户端从 Web 服务检索信息。该信息以字符串形式返回。模块 B 已经是一个 osgi 包。现在模块A也需要转换为osgi包,但不允许更改它的任何代码。所以你只能将所需的元数据添加到 list 文件中。我这样做了并将所有依赖项(包括 jax-rs 客户端)嵌入到一个 jar 文件中。现在,如果模块 B 调用模块 A 的静态方法,我会得到一个 ClassNotFoundException 异常,因为模块 B 的类加载器用于查找 jax-rs 客户端。我做了一些调试,如果我在模块 A 中执行行 Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()) 一切正常,因为现在使用了模块 A 的类加载器并且客户端可以在该模块的类路径中找到。由于我无法更改模块 A 的任何代码,因此该解决方案对我不起作用。有没有人给我另一个提示我如何处理这些类加载问题?

最佳答案

创建 bundle C,其依赖关系同时满足 bundle A 和 B

OSGi 的模块化是一种优势,而不是劣势。如果有一些第三方代码需要共享,最好将其放在他自己的包中。

现在,您只需确保 bundle A 和 B 的 list 导入相同的内容即可。

关于java - 使用 jax-rs 客户端解决 osgi 类加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54597127/

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