0

有一个当前应用程序可以读取非常旧的 Apache common io 版本 1.2 版本。很长一段时间后,我们使用最新的 2.3 发布了一些新更新,我们希望仅使用最新的 commons IO jar 文件运行新代码。我如何处理这个问题,以便新代码只能从最新的通用 IO jar 和旧版本中读取。(简而言之,不要触摸任何正在运行的东西)

在线搜索我意识到我需要加载类,但有点困惑我应该做 UrlClassLoader 还是 ClassLoader,如果类加载是正确的路径,那么我如何读取所有类,因为里面的类相互依赖,所以如果我调用主类来运行它执行的代码,而不用担心依赖或调用每个类

请建议?提前致谢。

4

2 回答 2

0

类加载器绝对是解决方案的一部分,但自己实现它非常棘手。尝试使用 OSGi,如果您正确配置它,它将为您执行此操作。

于 2012-06-05T19:08:30.707 回答
0

您可以使用 OSGi 框架并同时运行两个 Apache 通用 io 库。然后,您可以通过导出和分别导入具有特定版本的包来控制哪个包使用哪个 apache 库包。

您将在 lib 包中拥有: Export-Package: com.acme.foo;version="1.24"

并在使用它的捆绑包中:

导入包:com.acme.foo;version="[1.23, 2.0)"

由于在 OSGi 中每个包都有自己独立的类加载器,所有正确子包和类的加载将自动处理,不会有冲突。

例如,您可以查看这些关于编写 OSGi 包的说明和演示- 使用mBedded Server运行它们。

于 2012-06-06T08:00:54.240 回答