jar包冲突,是是什么意思?jar包冲突的原因是什么?
网上的解释,我认同,是因为一个class出现在多个jar包中:
http://blog.****.net/fo11ower/article/details/44992667
--------例子2:
http://www.cnblogs.com/songshu120/p/6164114.html
----------总结:
jar冲突是原因,是由工程报错(如明明导入了包含某个class的jar包却还提示classnotfound、nosuchmethod)得出的结论,所以要弄明白的问题是,为什么明明引入了包含某个class的jar包却还提示classnotfound、nosuchmethod。
1例子nosuchmethod:
有一个A.java如下:
import XX.classB
class A(){
···
classB.MethodB();
}
其中classB.class在B.jar中,classB.class的源码在如下:
import YY.classC//这里import的可能是C1.jar中的classC,也可能是C2.jar中的classC。
class B(){
classC.methodC();
}
其中classC.class在C1.jar、C2.jar中都存在,而C1.jar中的classC.class没有methodC(),而C2.jar中的classC.class有methodC();
而运行classB.class的时候,其头部import的可能是C1.jar中的classC,也可能是C2.jar中的classC。
如果import的可能是C1.jar中的classC,肯定就会报错nosuchmethod,因为C1.jar中的classC没有methodC()方法。
2例子 notclassfound
我明明引入了包含某个class的jar包,但是运行的时候确报错,classnotfound.
例如:
import XX.classA //classA在A.jar中
class classB{
classA.methodA();
}
import YY.classC
class classA{
···
public methodA(){
···classC.methodC();
}
}
A.jar在MANIFEST class-path中指定了C.jar,即A.jar中的某些类如classA引用了C.jar中的classC。而classC同时存在与C.jar和C2.jar中。而工程的lib只引入了C2.jar,而没有引入C.jar,这样,就算classC并且methodC()都已经通过C2.jar引入了,但是工程还是会报错:
classnotfound,因为A.jar中的MANIFEST class-path中指定的是引入C.jar,而就算C2.jar中有classC,classloader也不会将它引入(即加载到内存中)。