多个jar版本和特定jar的读取类

时间:2012-06-05 19:04:21

标签: java jar

目前有一个应用程序可以读取非常旧版本的Apache common io 1.2版。我们在很长一段时间后使用最新的2.3发布了一些新的更新,我们只想使用最新的公共IO jar文件来运行新的代码。 我如何处理这个问题,以便新代码只读取最新的常见IO jar和旧版本的旧代码。 (总之不要碰任何正在运行的东西)

在线搜索我已经意识到我需要加载类但是我是否应该做UrlClassLoader或ClassLoader有点混淆,如果类加载是正确的路径那么我怎么能读取所有的类,因为里面的类有相互依赖,因此,如果我调用主类来运行我的代码,它执行时不必担心依赖或调用每个类

请建议?提前致谢。

2 个答案:

答案 0 :(得分:0)

类加载器绝对是解决方案的一部分,但是自己实现它是非常棘手的。尝试使用OSGi,如果你正确配置它将为你做这件事。

答案 1 :(得分:0)

您可以使用OSGi框架并在彼此旁边运行两个Apache公共io库。 然后,您可以通过导出和分别导入具有特定版本的软件包来控制哪些软件包使用哪个apache库软件包。

你将在lib包中: Export-Package:com.acme.foo; version =“1.24”

并在使用它的捆绑包中:

Import-Package:com.acme.foo; version =“[1.23,2.0)”

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

您可以查看示例these instructions and demos for writing OSGi bundles - 使用mBedded Server运行它们。