maven管理库依赖,有个好处就是连同库的依赖的所有jar文件一块儿下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不一样版本的问题,好在pom的配置里面容许用<exclusion>来排除一些不须要同时下载的依赖jar 。maven
一、mvn的传递依赖特性:mvn编译打包除了会引入直接申明的依赖,还会引入间接申明的依赖spa
二、mvn的依赖仲裁规则:开发
1). 按照项目总控POM的DependencyManager版本声明进行仲裁。io
2). 如无仲裁声明,则按照依赖最短路径肯定版本。编译
3). 若相同路径,有严格区间限定的版本优先。class
4). 若相同路径,无版本区间,则按照先入为主原则。打包
三、依赖的scope会影响依赖的影响范围。配置
一、根据报错的class名或方法名定位到可能致使冲突的jar包,jar包冲突引入有几种状况:下载
1). 引入了这个jar包的多个版本,而mvn仲裁的时候取了错误的版本,这个版本自己就缺乏正确的class或方法。方法
2). 引入了不一样坐标可是具备同名class的多个jar,mvn加载class的顺序差别会致使加载到错误的class。
二、经过mvn dependency:tree > tree.txt 导出所有的依赖。 可使用 -Dverbose 、-Dincludes或者-Dexcludes参
数来精肯定位致使冲突的jar包。
三、找到须要排除的依赖jar包,经过mvn仲裁优先的方法定义正确的jar包,或者经过exclusion的方式排除错误的jar包。
4.舒适提示:另外在项目开发中jar尽可能按需引入,系统管理起来,别什么都无论直接加包进来,这样也能够在必定程度上减小jar
包冲突的风险。