jar包衝突,是是什麼意思?jar包衝突的原因是什麼?
網上的解釋,我認同,是因為一個class出現在多個jar包中:
http://blog.csdn.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也不會將它引入(即載入到記憶體中)。