【问题标题】:Multiple jar version and reading classes from particular jar多个 jar 版本和从特定 ​​jar 读取类
【发布时间】:2012-06-05 19:04:21
【问题描述】:

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

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

请建议?提前致谢。

【问题讨论】:

    标签: java jar


    【解决方案1】:

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

    【讨论】:

    • 感谢您研究 OSGi
    【解决方案2】:

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

    您将在 lib 包中拥有: 导出包:com.acme.foo;version="1.24"

    并在捆绑包中使用它:

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

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

    您可以检查例如these instructions and demos for writing OSGi bundles - 要运行它们,请使用mBedded Server

    【讨论】:

    • 非常感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2015-04-21
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多