jar包冲突,是是什么意思?jar包冲突的原因是什么?

网上的解释,我认同,是因为一个class出现在多个jar包中:

http://blog.****.net/fo11ower/article/details/44992667jar包冲突,是是什么意思?jar包冲突的原因是什么?



--------例子2:


http://www.cnblogs.com/songshu120/p/6164114.html


jar包冲突,是是什么意思?jar包冲突的原因是什么?


----------总结:

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也不会将它引入(即加载到内存中)。