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