java:将jar的特定版本加载到我的类中

时间:2013-09-18 10:37:21

标签: java

我的情况是同一个jar有2个版本,比如Jv1.jar和Jv2.jar。我编写了一个java类,它需要Jv2.jar中的所有类。我怎么做到的?立即的帮助非常感谢。非常感谢。

1 个答案:

答案 0 :(得分:1)

最好的解决方案是迁移所有代码以使用Jv2.jar并删除Jv1.jar。

否则你必须在类路径中将Jv2.jar放在Jv1.jar之前,因为URLClassLoader 将从第一次出现加载该类。 建议不要使用此解决方案,因为对于其他开发人员来说,或者在几周内您自己也不容易理解,并且取决于URLClassLoader的实现。

你必须把它想象成一个罐子叠加。

例如:

              Jv2.jar                                 Jv1.jar

    +- com                                    +- com
      +- company                                +- company
        +- A.class                               +- A.class
        +- B.class                               +- B.class
        +- C.class                               +- D.class           

不要假设Jv2.jar在类路径中的Jv1.jar之前。

  • 如果您的代码使用了类A,则会加载Jv2.jar类A
  • 如果您的代码使用了类D,则会加载Jv1.jar类D

现在有了棘手的部分:

如果来自Jv1.jar的类D使用类B,则将加载Jv2.jar的类B,而不是来自Jv1.jar的类B。< / p>

因此,如果D调用B方法,则只有在B类与Jv1.jar和Jv2.jar之间具有二进制兼容性时才能使用它。

但请记住,它仍然可能导致意外行为。由于二进制兼容性并不一定意味着该方法的前后条件没有改变。

如果您要求在类路径中需要不同版本的jar并同时使用其中一个,则应考虑OSGI。