java - 如何在运行时使用不同版本的库?

标签 java

我有一个java项目,我使用外部jar(不受我控制)。 到目前为止,每当该库的新版本发布时,我都会更新 我的项目使用更新的项目,但现在需要 项目使用该库的不同版本。

我的问题是我不知道如何做到这一点。 我如何在java中告诉根据jar的版本进行导入,

我需要做什么:

    int versionFlag = getVersion2use();
    if(verssionFlag = 0){
           use imports from last version
    }else if(verssionFlag = 1){
          use imports from last version 1
    } else if(verssionFlag = 2){
         use imports from last version 2
    }

这将在运行时使用!

最佳答案

这通常是项目在构建时而不是在运行时动态执行的操作。

也就是说,这是关于如何在运行时动态地将 jar 添加到系统类加载器的一个很好的答案,您可以将其应用到上面的一般逻辑中:

How should I load Jars dynamically at runtime?

对于导入,您无法动态选择导入,这是无法回避的事实。因此,如果幸运的话,这两个版本具有相同的基本 API。如果这种情况成立,请尽早在应用程序中将 jar 添加到类加载器,然后像平常一样进行开发。

但是,如果两个版本具有不同的 API,那么您将不得不编写一些非常复杂的代码来尝试构建对象,并且几乎无处不在地捕获所有许多不同的类加载/类不兼容异常(例如 ClassNotFoundException)。更糟糕的是,您可能必须在某种外观或工厂架构后面执行此操作,以便您实际上可以继续运行与所有这些类加载恶作剧隔离的软件。简而言之,如果两者具有不同的 API,您实际上最好编写两个单独的产品。

关于java - 如何在运行时使用不同版本的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621325/

相关文章:

java - 发送短信之前显示确认对话框

java - 使用 apache-camel 在 Java 中获取 SQL 记录并使用制表符分隔分隔符写入文本文件(Spring 和 XML DSL 文件除外)

java - 使用 OSC 时如何避免 java.util.ConcurrentModificationException?

java - 如何在更改父项后强制 View 重新计算其位置

java - 同步 2 个复杂对象图状态的最佳方法是什么

java - 使用公共(public)方法更改 Java 中的私有(private)字段

java - 将 Bundle 转换为 JSON

java - 当方法包含多个具有多个返回值的 if 语句时,如何从方法中获取返回值?

java - ORA-00904 错误

java - Android GradientDrawable setColor 不起作用