【问题标题】:How can I use two versions of the same library in the same project in Java? [duplicate]如何在 Java 的同一个项目中使用同一个库的两个版本? [复制]
【发布时间】:2015-10-31 06:38:06
【问题描述】:

假设我将 xmlsec-1.5.8.jar 用于我的应用程序的一部分(它一直使用它)。

然后假设我正在向我的应用程序添加一个新功能,而新功能需要使用 xmlsec-2.0.5.jar。

我不想为所有旧代码替换 xmlsec 的用法,因为我不想重新测试所有已经工作的代码(其中大部分代码我不知道它是如何工作的因为它是在我来这家公司之前创建的)。

Java 中有没有一种方法可以在我的项目的一部分中使用 xmlsec-1.5.8.jar 类,然后在另一部分中使用 xmlsec-2.0.5.jar?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    您需要研究类加载器。

    这很棘手,但这里有一个很好的解释。

    Java, Classpath, Classloading => Multiple Versions of the same jar/project

    您可能必须卸载旧 jar,加载新 jar,运行任何新功能,然后卸载新 jar 并重新加载旧 jar。

    【讨论】:

    • 问题在于处理是并发的,因此任何一个库都可以随时被进程调用。如果我在进程中卸载它并且另一个进程使用它,那么它会抛出我相信的运行时类未找到异常。如果是这种情况,那么这是行不通的。
    • 另外,在应用程序运行时一直卸载/加载类会不会很慢?
    • 您不一定需要加载或卸载类/库。您可以创建单独的类加载器,从不同的 JAR 文件加载类。诀窍在于将您的作业分派给由正确加载器加载的类。这是可以做到的,实际上是 OSGi 等平台所依赖的机制(动态加载和卸载捆绑为 JAR 文件的服务,并在运行时通过共享接口提供服务)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多