用maven建了个web工程,过程中却老是碰到类找不到的错误,而相关的包我确定已引入,我怀疑是包不同版本冲突的问题,我想请教下,如果一个第三方包被多个工程引用了不同版本,maven是怎么处理的?又没有办法可以使maven在引入包时,如果此包已存在不再引入别的版本?
看一下maven文档吧。maven处理冲突是按路径优先的。如果你直接使用A D两个依赖。
A - B - Cv1 而 D - Cv2 那么,maven会使用Cv2。因为Cv2路径短。如果是 A - Cv1 而D - Cv2,那么,就看那个依赖定义在前,如pom.xml定义中A依赖在前,那么会使用Cv1。
通过pom.xml来管理第三方包
这个一般都是存在多个版本(间接依赖引入的),如commons-io.1.1.jar, commons-io.2.1.jar类似这种,低版本中没有高版本中的类,需要使用依赖仲裁依赖指定具体版本;
如果你使用的是maven wtp web工程 使用eclipse judo版本就OK了。我之前用3.7.2的经常报找不到类的错误,需要重新清理,导入才可以,很是麻烦。换上judo一切OK
如果不是maven wtp web工程,那就用eclipse的dependency 视图分析,找到那个找不到的类,确定在类路径中。使用ctrl shift t能找到,并不一定放在类路径中了,这我也曾经中招
关于版本冲突的问题,maven没那么智能,去识别,需要自己去exclude